-
URL获取图片size
2021-01-10 04:12:03<div><p>加个分类可好,根据URL来获取图片的size...仿写微博,结果官方接口没有提供size</p><p>该提问来源于开源项目:ibireme/YYWebImage</p></div> -
Swift - Cell自适应+代码约束(SnapKit)横竖屏支持平铺+根据URL获取图片size
2016-07-15 11:41:55对于适配博主早已仰慕已久,后来看了Masonry之后,也是对代码约束有了初步了解,慢慢的接触到Swift,就想把约束带进Swift,刚好Masonry的团队也开发了针对Swift约束的SnapKit库,索性就...获取图片size 原先获取图片对于适配博主早已仰慕已久,后来看了Masonry之后,也是对代码约束有了初步了解,慢慢的接触到Swift,就想把约束带进Swift,刚好Masonry的团队也开发了针对Swift约束的SnapKit库,索性就练习下,cell自适应在前面有用Object-C写过,但是当时用的是相对布局,也不支持横屏。这里的代码在原基础上采用Swift,改进了一些细节,下面慢慢介绍:
1.获取图片size
原先获取图片size是在cell布局时来获取的,而在获取图片size时是要发起网络请求的,so,除了阻塞主线程之外还会让tableview滚动起来奇卡无比,解决的办法就是在下载完数据的时候在下载的线程中直接获取图片的size并存储在字典中备下面使用,因为size有了,不管横竖屏只要有size得到的比例,可以完美适配。2.使用原生方法进行请求时要回调主线程刷新UI
前面博主由有发过怎么用原生的请求方法来访问网络,但是在这个Demo中博主犯了一个低级错误,因为原生请求本身就是一个线程,而博主用第三方的用习惯了,直接在请求完成后刷新tableview,在这个子线程中无疑会阻塞主线程,所以会看到等了好久才刷新出来数据,正确的做法是回到主线程:dispatch_async(dispatch_get_main_queue(), { print("OK") self.creatTableView() self._tableView.reloadData() })
3.横竖屏时屏幕width和height的变化
var WIDTH = UIScreen.mainScreen().bounds.size.width var HEIGHT = UIScreen.mainScreen().bounds.size.height
获取屏幕宽高有好多种办法,以上只是一种,那么在横屏时以上值是否变化呢?
实际上博主看了是没有变化的,高度是跟宽有点关系的,所以需要检测当前屏幕的状态了:if UIDevice.currentDevice().orientation == .Portrait { width = WIDTH } else { width = HEIGHT }
这样一来横竖屏就适配了。
这里先不放代码了,需要的自行下载:
https://github.com/codeliu6572/sizeSwift_cellLayout_getImageSizeByURL -
IOS 获取图片的size
2017-12-06 09:09:04// 获取图片的size// 获取图片的size
CGSize size = [UIImage imageNamed:@”regStep2_sex”].size;
// 根据图片url获取图片尺寸
+(CGSize)getImageSizeWithURL:(id)imageURL
{
NSURL* URL = nil;
if([imageURL isKindOfClass:[NSURL class]]){
URL = imageURL;
}
if([imageURL isKindOfClass:[NSString class]]){
URL = [NSURL URLWithString:imageURL];
}
if(URL == nil)
return CGSizeZero; // url不正确返回CGSizeZeroNSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL]; NSString* pathExtendsion = [URL.pathExtension lowercaseString]; CGSize size = CGSizeZero; if([pathExtendsion isEqualToString:@"png"]){ size = [self getPNGImageSizeWithRequest:request]; } else if([pathExtendsion isEqual:@"gif"]) { size = [self getGIFImageSizeWithRequest:request]; } else{ size = [self getJPGImageSizeWithRequest:request]; } if(CGSizeEqualToSize(CGSizeZero, size)) // 如果获取文件头信息失败,发送异步请求请求原图 { NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:nil error:nil]; UIImage* image = [UIImage imageWithData:data]; if(image) { size = image.size; } } return size;
}
// 获取PNG图片的大小
+(CGSize)getPNGImageSizeWithRequest:(NSMutableURLRequest*)request
{
[request setValue:@”bytes=16-23” forHTTPHeaderField:@”Range”];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if(data.length == 8)
{
int w1 = 0, w2 = 0, w3 = 0, w4 = 0;
[data getBytes:&w1 range:NSMakeRange(0, 1)];
[data getBytes:&w2 range:NSMakeRange(1, 1)];
[data getBytes:&w3 range:NSMakeRange(2, 1)];
[data getBytes:&w4 range:NSMakeRange(3, 1)];
int w = (w1 << 24) + (w2 << 16) + (w3 << 8) + w4;
int h1 = 0, h2 = 0, h3 = 0, h4 = 0;
[data getBytes:&h1 range:NSMakeRange(4, 1)];
[data getBytes:&h2 range:NSMakeRange(5, 1)];
[data getBytes:&h3 range:NSMakeRange(6, 1)];
[data getBytes:&h4 range:NSMakeRange(7, 1)];
int h = (h1 << 24) + (h2 << 16) + (h3 << 8) + h4;
return CGSizeMake(w, h);
}
return CGSizeZero;
}
// 获取gif图片的大小
+(CGSize)getGIFImageSizeWithRequest:(NSMutableURLRequest*)request
{
[request setValue:@”bytes=6-9” forHTTPHeaderField:@”Range”];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if(data.length == 4)
{
short w1 = 0, w2 = 0;
[data getBytes:&w1 range:NSMakeRange(0, 1)];
[data getBytes:&w2 range:NSMakeRange(1, 1)];
short w = w1 + (w2 << 8);
short h1 = 0, h2 = 0;
[data getBytes:&h1 range:NSMakeRange(2, 1)];
[data getBytes:&h2 range:NSMakeRange(3, 1)];
short h = h1 + (h2 << 8);
return CGSizeMake(w, h);
}
return CGSizeZero;
}
// 获取jpg图片的大小
+(CGSize)getJPGImageSizeWithRequest:(NSMutableURLRequest*)request
{
[request setValue:@”bytes=0-209” forHTTPHeaderField:@”Range”];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];if ([data length] <= 0x58) { return CGSizeZero; } if ([data length] < 210) {// 肯定只有一个DQT字段 short w1 = 0, w2 = 0; [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)]; [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)]; short w = (w1 << 8) + w2; short h1 = 0, h2 = 0; [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)]; [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)]; short h = (h1 << 8) + h2; return CGSizeMake(w, h); } else { short word = 0x0; [data getBytes:&word range:NSMakeRange(0x15, 0x1)]; if (word == 0xdb) { [data getBytes:&word range:NSMakeRange(0x5a, 0x1)]; if (word == 0xdb) {// 两个DQT字段 short w1 = 0, w2 = 0; [data getBytes:&w1 range:NSMakeRange(0xa5, 0x1)]; [data getBytes:&w2 range:NSMakeRange(0xa6, 0x1)]; short w = (w1 << 8) + w2; short h1 = 0, h2 = 0; [data getBytes:&h1 range:NSMakeRange(0xa3, 0x1)]; [data getBytes:&h2 range:NSMakeRange(0xa4, 0x1)]; short h = (h1 << 8) + h2; return CGSizeMake(w, h); } else {// 一个DQT字段 short w1 = 0, w2 = 0; [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)]; [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)]; short w = (w1 << 8) + w2; short h1 = 0, h2 = 0; [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)]; [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)]; short h = (h1 << 8) + h2; return CGSizeMake(w, h); } } else { return CGSizeZero; } }
}
-
// 获取图片的size
2018-08-22 15:27:01CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;
-
在使用Photos框架时获取的图片size不准确问题
2020-07-10 16:22:26在使用Photos框架时获取的图片size不准确问题Photos获取系统相册数组获取相册中所有图片对象 在开发中有自定义相册预览需求,就用了Photos框架获取系统中的相册名称和对应图片,因为有图片编辑裁剪需求,要根据图片...在使用Photos框架时获取的图片size不准确问题
在开发中有自定义相册预览需求,就用了Photos框架获取系统中的相册名称和对应图片,因为有图片编辑裁剪需求,要根据图片的size变化编辑框。
Photos获取系统相册数组
PHFetchResult * sysfetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil]; for (PHAssetCollection * assetCollection in sysfetchResult) { //相册名称 NSString * collectionTitle = assetCollection.localizedTitle; //获取某个相册的全部图像对象 NSArray * arr = [self getAssetWithCollection:assetCollection]; }
获取相册中所有图片对象
- (NSArray *)getAssetWithCollection:(PHAssetCollection *)collection { PHFetchOptions * options = [[PHFetchOptions alloc] init]; options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; NSMutableArray * assetArray = [NSMutableArray array]; PHFetchResult * assetFetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:options]; for (PHAsset * asset in assetFetchResult) { [assetArray addObject:asset]; } return assetArray; }
至此,我们已经可以获取到相册的所有PHAsset对象,在UI展示时,需要根据PHAsset对象去获取UIImage对象,方法如下:
PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init]; //是否缩放 options.resizeMode = PHImageRequestOptionsResizeModeExact; //图片质量 options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat; //当图片为icoud资源是否获取,默认No options.networkAccessAllowed = NO; //是否为同步,默认为no options.synchronous = YES; [[PHCachingImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(width, height) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { //当我们拿到了result图像,展示即可 }];
在获取到目标图像后,发现根据上述方法获取到的图像的size和图像的真实size不符。
后检查代码发现,在请求image数据时,对于图像是否缩放的配置进行了修改,将缩放属性修改为
options.resizeMode = PHImageRequestOptionsResizeModeNone即可。 -
angularjs input上传图片前获取图片的Size
2019-09-25 05:23:09首先我们需要一个指令来追踪input的change。ngChage不适用input[file]。 app.directive("fileread", [function () { return { scope: { selectedFile: "=", changed: '&' }, l... -
matlab获取图片的size属性,长宽
2017-09-05 15:58:00%获取图像宽length=size(imread(‘文件名'),1); %获取图像长 g=imread(['D:\文件及下载相关\桌面\代码 - 副本\代码\Image\Set5\' Names{k}]); g2=im2bw(g,0.5); [dm,dn]=size(g2); batche... -
iOS - 获取本地图片和网络图片的大小size
2017-06-09 15:46:00// 获取图片的size CGSize size = [UIImage imageNamed:@"20170609.png"].size; 获取网络图片的尺寸: // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; ... -
IOS -- 获取本地图片和网络图片的大小size
2018-08-08 10:05:55// 获取图片的size CGSize size = [UIImage imageNamed:@"regStep2_sex"].size; 获取网络图片的尺寸: // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil;... -
上传图片时预览获取图片原始的宽度和size大小
2017-03-06 14:17:46见参考:http://www.lanrenzhijia.com/pic/3194.html 获取图片大小this.files[0].size -
关于angularjs input上传图片前获取图片的Size 浅析
2015-10-08 22:57:00首先我们需要一个指令来追踪input的change。ngChage不适用input[file]。 app.directive("fileread", [function () { return { scope: { selectedFile: "=", changed: '&' }, link... -
获取请求图片的size大小
2015-06-12 11:42:52NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@... NSLog(@"size =%f =%f",size.width,size.height); 同步请求 会卡! -
QT在图片中间绘制文字,获取文字size 和 pos
2018-12-29 17:00:47QFont ft = this-&... //获取系统当前字体对象 ft.setPixelSize(15); //设置字体大小 QFontMetrics fm = QFontMetrics(ft); //创建字体计算类 double pixW = fm.width(imageText0); //获取字体占用的宽度... -
UI拉伸图片和获取字符串的的size
2016-01-27 23:10:38//获取字符串size font:字体 maxsize(最大宽度和最大高度) -(CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize{ NSDictionary *attrs = @{NSFontAttributeName : font}; return [self... -
从Gallery中获取照片并且将图片Size调整到合适手机尺寸
2016-08-22 20:04:52//当这个参数为true的时候,意味着你可以在解析时候不申请内存的情况下去获取Bitmap的宽和高 //这是调整Bitmap Size一个很重要的参数设置 options.inJustDecodeBounds = true; BitmapFactory.decodeStream( is,... -
获取图片
2017-01-23 10:08:00+(UIImage*)getImageByRetina:(NSString*)imageName ... float nativeWidth= MIN([[UIScreen mainScreen] nativeBounds].size.width,[[UIScreen mainScreen] nativeBounds].size.height); float screen... -
获取图片像素
2020-05-22 15:43:58########获取图片指定像素点的像素 img = Image.open('cropped.jpg') size = img.size w = size[0] h = size[1] img1 = Image.new('RGBA', (w, h), (255, 255, 255, 0)) img2 = Image.new('RGBA', (w, h), (255, 255... -
javascript 获取图片的尺寸 how to get image size using javascript
2012-08-06 15:40:00传递一个img对象。 function ShowImage(img) { var pic = document.createElement("img"); pic.src = img.src; alert(pic.width + ", " + pic.height);} 转载于:...
-
历届试题 分考场
-
rslogix5000软件工具介绍.pdf
-
MYSQL长字符截断
-
Java IF的单选择结构 -04天 学习笔记
-
VC实现teechart时间轴自右向左推移-C++代码类资源
-
超强补丁技术_让EXE启动时自动加载你的DLL(含VC6写的DLL源码模版)
-
MATLAB2018从入门到精通MATLAB视频教程-实战案例版.pdf
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
PPT大神之路高清教程
-
用Go语言来写区块链(一)
-
docker菜鸟学习笔记之ubuntu容器中安装python3和卸载python2
-
2014年重庆理工大学《软件项目管理》期末考试试卷.pdf
-
Navicat for MySQL
-
2014年重庆理工大学《ERP原理及应用I》两套期末考试试卷.pdf
-
Windows10蓝牙驱动合集
-
远程桌面多窗口工具.rar
-
积攒了不少学习渠道和方法,分享给大家
-
matlab即将消失的inline小朋友
-
HW解决方案业务拓展指引.pptx
-
ThreadLocal全面解析