在iPhone中完全加载之前获取图像宽度和高度

S.P*_*.P. 5 iphone objective-c nsurl

我正在使用UITableViewCell加载图像

[NSData dataWithContentsOfURL:imageUrl]

要为我的tableview单元格设置自定义高度,我需要加载的图像的实际大小.

在完全加载图像之前,我们可以获得图像的宽度和高度吗?提前致谢.

Sam*_*uel 9

你可以这样做:

NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
UIImage *image = [UIImage imageWithData:imageData];
NSLog(@"image height: %f",image.size.height);
NSLog(@"image width: %f",image.size.width); 
Run Code Online (Sandbox Code Playgroud)

  • 问题指出“在完全加载之前”.. (2认同)

Ale*_*lex 7

尝试如下所示的图像 I/O 接口。这将使您无需加载整个文件即可获取图像大小:

#import <ImageIO/ImageIO.h>

NSMutableString *imageURL = [NSMutableString stringWithFormat:@"http://www.myimageurl.com/image.png"];

CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)[NSURL URLWithString:imageURL], NULL);
NSDictionary* imageHeader = (__bridge NSDictionary*) CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
NSLog(@"Image header %@",imageHeader);
NSLog(@"PixelHeight %@",[imageHeader objectForKey:@"PixelHeight"]);
Run Code Online (Sandbox Code Playgroud)


ser*_*gio 3

NSDataUIImage是一个“不透明”的数据,因此在将其转换为更“有用”的东西之前(例如,创建一个by it方法) ,您不能对其做太多事情-initWithData:。那时你可以查询图像尺寸,但对你来说已经晚了。

如果您确实需要在图像完全下载之前知道图像大小,我看到的唯一方法是实现一个最小的服务器端 API,以便您可以在尝试下载之前询问图像大小。

不管怎样,为什么在实际下载之前需要知道图像大小?您能否在下载时(即从您的请求委托方法)设置行高?