8

我拍摄了一张 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);
4

1 回答 1

7

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

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

于 2013-03-27T10:22:37.687 回答