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

3
我有一个需求,即在用户可以从“相机胶卷”中选择图像,并且我的应用程序需要优化该图像并将其上传到服务器。我正在使用ALAssets库和自定义选择器,让用户从“相机胶卷”中选择照片。我能够完美地实现此目标,但文件大小的增加却成了问题。
问题如下:
当用户选择1.7MB的照片(这是iOS在我尝试邮寄照片时报告的完整大小)时,当我直接从该ALAssetALAssetRepresentation获取字节并将其转换为NSData时,数据的大小也为1.7MB。但是,当我使用以下代码从ALAssetRepresentation获取UIImage..

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

然后使用压缩质量= 1.0f的UIImageJPEGRepresentation()UIImage转换为NSData时,NSData的大小几乎增加了一倍(3.2MB)。

理论上,它不应该只是1.7MB吗??

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

请帮忙看看..

先谢谢。


你最终解决了这个问题吗? - Erben Mo
我最终只使用了UIImageJPEGRepresentation(),压缩质量为0.95。图像大小被缩小到应有的大小,而质量并没有真正降低。 - Ravi
嗨@Ravi,你最终找到解决方法了吗? - Omid Hashemi
@OmidHashemi 就像我之前的评论一样,我最终只使用了UIImageJPEGRepresentation(),压缩质量为0.95。图像大小恢复到应有的大小,而质量并没有真正降低。 - Ravi
@Ravi 这个有什么更新吗?我现在也处于同样的情况。 - JDG
我最近没有尝试过这个。我用0.9f的质量尝试了UIImageJPEGRepresentation(),尺寸还可以,而且我并没有真正看到任何明显的质量变化。所以我就选择了它。 - Ravi
1个回答

1
你指定了什么压缩质量?这与原始图像使用的是否相同或不同?如果不同,请尝试使用相同的压缩因子进行压缩,看看大小是否相同。
NSData * UIImageJPEGRepresentation (
   UIImage *image,
   CGFloat compressionQuality
);

我正在使用1.0的压缩质量,并从用户的相机胶卷/照片库中获取照片。我不确定他们的压缩质量,但我假设他们也有1.0的压缩质量。如果我错了,请纠正我。 - Ravi
我没有那个信息,但我认为你不应该假设照片库使用了什么压缩方式。文档中可能会有说明。尝试使用较低的压缩质量值,看看会得到什么结果。 - spring
它可以减小尺寸,但我希望图像以最高可能的质量进行打印。感谢TOD试图帮助我。 - Ravi

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