2013-03-27 296 views
8

我拍摄了一张13.3MB的图像并将其添加到XCode。我知道编译时,XCode会执行一些技巧来降低文件大小。我这样做,来测试像现在有多大,,转换成数据后:以字节为单位给出的不准确的NSData大小

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

是否有一个特定的原因,你想图像的NSData'? – 2013-03-27 10:23:40

+1

如果您回答了您的问题,请回答并标记为正确。 – 2013-03-27 10:24:22

+0

@NathanWhite 1.我需要NSData,以便在测试应用程序中测试一些内存使用情况。 2.第一个问题仍然存在 - 为什么UIImageJPEGRepresentation会将图像的大小缩小2倍? – Andrew 2013-03-27 10:25:46

回答

7

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

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

相关问题