2011-11-05 28 views
3

我已经成功地使用CGImageSource读取(主要是JPEG)和CGImageDestination中的图像以将其写回。它可以工作,但是我的图像比以前小得多(3.9Mb图像将成为2.1 Mb图像)。如何修改EXIF数据而不用在Cocoa中压缩图像?

我一直在玩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数据,使压缩(因此文件大小)单独?

回答

2

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

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

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

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

相关问题