使用UIImageJPEGRepresentaion()将UIImage转换为NSData并将其保存到文件会增加文件大小(以字节为单位)

时间:2012-07-16 08:12:45

标签: objective-c uiimage size nsdata

我要求用户可以从camera roll中选择图像,我的应用程序需要优化图像并将其上传到服务器。我正在使用ALAssets库和自定义选择器供用户从camera roll中选择一张照片。我能够完美地实现这一目标,但是文件大小增加了。

问题如下:
当用户选择1.7MB的照片时(当我尝试邮寄照片时,iOS报告的完整尺寸),当我直接从ALAssetRepresentation获取字节时{1}}并将其转换为ALAsset,数据大小也是1.7 MB。但是,当我使用以下代码从NSData获取UIImage时..

UIImage * selImage = [UIImage imageWithCGImage:[assetRepresentation fullResolutionImage] scale:[assetRepresentation scale] orientation:[assetRepresentation orientation]];

并使用压缩质量= 1.0f的ALAssetRepresentationUIImage转换为NSData,NSData大小几乎是原始大小的两倍(3.2MB)。

理想情况下,它不应该只有1.7MB吗?

正如预期的那样,当我将其保存到文件时,文件大小仍为3.2MB(我通过导入沙箱应用程序的文档文件夹使用xcode 4.2进行了检查)。但有趣的是当我在我的mac上用UIImageJPEGRepresentation()打开文件,并检查字节大小时,它说1.7MB(3.2 MB),这非常令人困惑..

请帮助..

提前致谢。

1 个答案:

答案 0 :(得分:1)

您指定的压缩质量是多少?这与原始图像上使用的相同或不同吗?如果不同,请尝试使用相同的压缩因子,看看大小是否相同。

NSData * UIImageJPEGRepresentation (
   UIImage *image,
   CGFloat compressionQuality
);