2014-12-19 26 views
1
再壓圖片

我試圖使用修改JPEG元數據,而不在iOS的

CGImageSourceCreateWithData CGImageDestinationCreateWithData

然後

CGImageDestinationAddImageFromSource

但這種放棄在原文件中的任何縮略圖或其他嵌入式信息。我想要做的就是在文件中讀取,修改其元數據,然後只用改動將其寫出來。但我會解決所有問題,然後再放回去。現在一個1.2MB的圖像文件會被轉換爲437kB的文件,並丟失額外的數據。

有沒有其他的東西可以使用CGImage?這甚至可以通過iOS API完成嗎?

回答

0

我正在尋找的是一個讀取 - 修改 - 寫入操作的圖像文件,允許更改,但在其他方面維護未改變的數據。我已經通過研究和測試確定這在iOS中不可行。最接近的機制是CGImage處理,但這隻允許您從源圖像(如圖像,縮略圖,屬性)中讀取選定的信息,然後使用其中一些信息(圖像,屬性)創建新的目標文件。沒有辦法在新的目標文件中包含縮略圖,並且無法繞開重新壓縮圖像。

0

您面臨的問題是元數據的結構取決於您使用的特定JPEG文件格式。

您需要查看CGImageProperties。您將不得不確保您的特定文件格式的屬性也被複制。

+0

我不確定我明白你在說什麼user3344003。我現在正在做的是讀取一個jpeg文件作爲NSData,從中創建一個imageSource,然後讀取imageProperties,進行修改,並將修改後的imagePropoerties全部寫回。當我從外部查看文件並查看其元數據和圖像時,該過程看起來很成功,但文件大小大大減小。它也不再有嵌入的縮略圖。 –

+0

您將需要複製元數據。該過程取決於用於存儲元數據的文件格式。 – user3344003

+0

圖像屬性是元數據,不是嗎?除了屬性中返回的EXIF,JFIF,TIFF,IPTC和GPS元數據外,還有其他元數據嗎?你能解釋一下我應該在尋找什麼,以及我該怎麼處理它?用於存儲圖像的文件格式與我讀取的文件的圖像格式相同。在這種情況下JPEG。除UTI之外還有什麼其他選項需要指定格式? –