介紹:
UIImageJPEGRepresentation 需要兩參數(shù):圖片的引用和壓縮系數(shù)
UIImagePNGRepresentation方法需要一參數(shù):圖片的引用
兩種方式返回的都是NSData類型
比較:
同樣是讀取攝像頭拍攝的圖片,UIImagePNGRepresentation(UIImage *image)返回的數(shù)據(jù)量大小為199K,而UIImageJPEGRepresentation(UIImage *image,1.0)返回的數(shù)據(jù)量只有140K,比前者少了50多K;而且如果對圖片的質(zhì)量要求不那么高的話,還可以通過設(shè)置壓縮系數(shù)進(jìn)一步減少數(shù)據(jù)量,降低壓縮系數(shù)后UIImageJPEGRepresentation(UIImage *image, 0.5),返回的數(shù)據(jù)大小只有11K,大大壓縮了圖片數(shù)據(jù)量,而且從視圖角度看,圖片的質(zhì)量并沒有明顯降低。所以,在讀區(qū)圖片數(shù)據(jù)內(nèi)容的時候,建議優(yōu)先使用方法UIImageJPEGRepresentation(UIImage *image, CGFloatcompressionQuality)
jpeg :耗時短

png:耗時長
代碼:
NSData *data = nil;
if(!UIImagePNGRepresentation(image)) {
data =UIImageJPEGRepresentation(image,0.1);
}else{
data =UIImagePNGRepresentation(image);
}
實(shí)用:
將數(shù)組中的UIImage取出,存為本地PNG圖片
問題: ?通過UIImagePNGRepresentation()方法保存PNG格式圖片時,由于ARC機(jī)制,會產(chǎn)生大量臨時的autorelease對象,需要等待runloop的autoreleasepool銷毀時才能銷毀這些對象。由于for循環(huán)中的臨時對象無法及時釋放,造成內(nèi)存持續(xù)增長,最終導(dǎo)致程序的不穩(wěn)定,甚至崩潰。

instruments:內(nèi)存暴漲? 盡管代碼中創(chuàng)建了自己的@autoreleasepool,但是臨時對象仍然沒有被銷毀,仍然以自己的節(jié)奏高速增長。

方案: 使用imageIO存儲PNG圖片

for循環(huán)存png圖片

先增后減:增長峰值為截圖產(chǎn)生的內(nèi)存

另一種方式: 渲染

imageIO: