2011-11-05 48 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)