2013-05-12 78 views
1

我有UIImageView的視圖。它被加載了JPG或PNG圖像格式。 jpg圖像版本的數據大小爲100k。然後我使用NSKeyedArchiver將我的視圖保存到一個文件中。該文件的大小約爲3MB。如果我使用了圖像的png版本,則存檔文件仍然在3MB左右。壓縮包含帶有加載圖像的UIImageView的NSKeyedArchiver文件

然後我使用zlib壓縮存檔文件。但它似乎沒有太大的影響。

我能做些什麼來讓它恢復到儘可能接近100k的區域?

順便說一句:如果我使用UIWebView加載圖像,然後用jpg版本的圖像,我會得到存檔文件非常接近原始jpg的。

編輯:馬特的回答給了我一個想法,所以這是我落得這樣做:

注:我我arleady使用的UIImageView

  1. 的一個子類創建伊娃舉行NSData爲圖片
  2. encodeWithCoder之前致電[super encodeWithCoder...],設置self.image = nil;並在1
  3. 設置self.image回使用保存NSData的圖像數據確保編碼的NSData伊娃在1

initWithCoder,使用NSData IVAR恢復圖像。

+0

它是3MB的原因無疑是因爲你正在保存*未壓縮*。不要緊,你的源文件是什麼。 'UIImage'只能理解位圖,所以這就是你將要保存的內容。正如馬特所說,你爲什麼需要這樣做呢? – borrrden 2013-05-13 04:27:02

+0

在這種情況下,我需要使用NSKeyedArchiver。但看到我的編輯。 – user523234 2013-05-13 14:15:02

回答

1

爲此,您不需要密鑰存檔器。

如果圖像來自您的應用程序內部,您已經有了圖像文件,所以沒有什麼可以保存的;只是將圖像的名稱歸檔。

如果圖像來自互聯網,您真正需要做的就是將原始圖像保存在一個文件中(並且可能將文件路徑存檔,以便以後恢復) 。你有一個JPG圖像,在某些時候是100K,所以爲什麼不抓住它,在你有它的時候?如果它以NSData的形式出現,那麼就有你的數據。如果沒有,您可以使用UIImageJPEGRepresentation將它轉換爲JPEG數據。無論哪種方式,NSData都可以直接保存到文件中。

大多數儘管如此,靈活而強大的保存(以及後來讀取)圖像數據的方法也與ImageIO框架相同。

+0

那麼,在這種情況下,我確實需要使用鍵控歸檔器......但是您的答案確實讓我想起了一些...... NSData所以我找到了一個基於它的可行解決方案。謝謝。如果您有興趣,請查看我的編輯。 – user523234 2013-05-13 14:07:52