【问题标题】:Inaccurate NSData size given in bytes以字节为单位的 NSData 大小不准确
【发布时间】:2013-03-17 09:21:03
【问题描述】:

我拍摄了一张 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 有什么具体原因吗?
  • 如果您已经回答了您的问题,请回答并标记为正确。
  • @NathanWhite 1. 我想要 NSData,这样我就可以在测试应用程序中测试一些内存使用情况。 2. 第一个问题仍然存在 - 为什么 UIImageJPEGRepresentation 会返回 2 倍于第一个大小的图像?

标签: iphone ios objective-c uiimage nsdata


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2018-01-01
    相关资源
    最近更新 更多