如何在不转换为NSData的情况下获取UIImage(ImageURL)的高度和宽度

时间:2013-11-18 08:02:39

标签: ios objective-c uiimage nsdata

在我的项目中,我需要以锯齿形方式显示不同尺寸的图像。所以,我将来自服务的uiimages(url)转换为NSData,然后我得到了uiimage。我的代码是

NSURL *url = [NSURL URLWithString:[[_result objectAtIndex:i ] valueForKey:@"PImage"]];

NSData *data = [NSData dataWithContentsOfURL:url];

UIImage *image = [UIImage imageWithData:data];

所以我可以得到图像大小(宽度和高度),但我的问题是根据图像大小,我需要创建UIView,这个代码对我来说很好,但是它占用太多时间(差不多25秒)加载8张图像。我认为将UIImage转换为NSData需要时间。有没有办法获得图像大小(宽度和高度)而不将其转换为NSData

感谢您花时间陪我。

2 个答案:

答案 0 :(得分:1)

您可以使用ImageIO框架在不实际从磁盘加载整个图像数据的情况下获取图像属性:

@import ImageIO;
...

NSURL *imageURL = … // Init URL somehow
CGImageSourceRef imgSource = CGImageSourceCreateWithURL((__bridge CFURLRef)url, NULL);
NSDictionary* imageProps = (__bridge_transfer NSDictionary*) CGImageSourceCopyPropertiesAtIndex(imgSource, 0, NULL);

NSLog(@"%@", imageProps);
CFRelease(imgSource);

图像宽度和高度将存储在PixelHeightPixelWidth键下的字典中(使用png图像测试,可能是其他图像格式将使用不同的键)

答案 1 :(得分:0)

使用 EGOImageView AsyncImageView,而不是将网址转换为数据和UIImage。您只需将URL传递给他们即可。再次基于图像大小的setFrame。