以字节为单位给出的NSData大小不准确

时间:2013-03-27 10:17:04

标签: iphone ios objective-c uiimage nsdata

我拍摄了一张13.3MB的图像并将其添加到XCode中。我知道在编译时,XCode会执行一些技巧来降低文件大小。我这样做了,在转换成数据后测试图像的大小:

UIImage *image = [UIImage imageNamed:@"image.jpg"];
NSData *data = UIImageJPEGRepresentation(image, 1.0);
NSLog(@"length: %i", data.length);

我回来的时间是26758066。如果那是以字节为单位,那么它读取为26.7MB。图像突然变得如此之大?我是否还有另一种方法可以在不首先通过UIImage的情况下以数据形式获取图像?

编辑:进一步的测试显示这是有效的,并带来~13.3MB的数据长度 - 预期数量:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSLog(@"length: %i", data.length);

1 个答案:

答案 0 :(得分:7)

您的代码正在做的是将图像解压缩到内存中,然后以最高质量比(q=1.0)重新压缩为JPEG。这就是图像突然变得如此之大的原因。

如果要检查存储在资源包中的文件,请向NSBundle询问完整文件路径,并使用NSFileManager读取文件大小。您可以在Mac上手动执行相同的操作,只需查看项目的BUILD_PRODUCTS_DIR即可。