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

And*_*rew 8 iphone objective-c uiimage nsdata ios

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

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

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

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

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

zou*_*oul 7

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

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