如何修改EXIF数据而不压缩Cocoa中的图像?

时间:2011-11-05 23:31:40

标签: cocoa core-graphics

我已成功使用CGImageSource读取(主要是JPEG)图像和CGImageDestination以将其写回。它可以工作,但我的图像比以前小很多(3.9Mb图像将成为2.1 Mb图像)。

我一直在玩kCGImageDestinationLossyCompressionQuality虽然它确实影响了文件的大小,但我不明白它使用的规模。

E.g。相同的3.7Mb文件将其大小更改为:

  • 1.9Mb,压缩质量为0.7

  • 2.4Mb,压缩质量为0.8

  • 3.0Mb,压缩质量为0.9

  • 7.4Mb,压缩质量为1.0

我尝试了所有的东西(使用二分法得到6位小数)来找到回归魔法3.9Mb的最佳位置,但它从3.3Mb跳到7.4Mb,似乎无法让它保持在这两个数字之间

我是否可以使用任何其他Objective-C库来修改单独留下压缩(以及文件大小)的EXIF数据?

1 个答案:

答案 0 :(得分:2)

使用CGImageDestination您正在创建一个新图像,并且新创建的图像的大小与原始图像的大小相匹配非常困难。 (取决于压缩级别)。

如果您只需修改原始图片中的元数据,而不更改图像信息,则应使用其他库。我知道其中有两个可用于可可应用程序:

  • libexif C ++库。支持编写jpgs。 LGPL许可证。
  • exiv2 C ++。支持写入大量格式。但它需要一个 如果您在商业应用程序中使用它,则需要支付许可证。

另一种选择是使用exiftool。它是一个perl脚本,已成为更改元数据信息的事实标准。您可以将其包含在应用程序的resources文件夹中,并使用NSTask调用它来更改图片的元数据。很容易做到,也是迄今为止三者中最好的工具。 (仅适用于mac,不确定是否针对iphone或Mac)