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

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);

你想获取图像的NSData有特定的原因吗? - Nathan White
1
如果您已经回答了您的问题,请撰写一个答案并将其标记为正确。 - Nathan White
@NathanWhite
  1. 我想获得NSData,以便在测试应用程序中测试一些内存使用情况。
  2. 第一个问题仍然存在-为什么UIImageJPEGRepresentation返回的图像大小是第一个的两倍?
- Andrew
1个回答

7
你的代码所做的是将图像解压到内存中,然后以最高质量比率(q=1.0)重新压缩为JPEG格式。这就是为什么图像突然变得很大的原因。
如果你想检查存储在资源包中的文件,可以要求NSBundle提供完整的文件路径,并使用NSFileManager读取文件大小。你也可以在Mac上手动完成相同的操作,只需查看项目的BUILD_PRODUCTS_DIR即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接