介紹:
UIImageJPEGRepresentation 需要兩參數(shù):圖片的引用和壓縮系數(shù)
UIImagePNGRepresentation方法需要一參數(shù):圖片的引用
兩種方式返回的都是NSData類型
比較:
同樣是讀取攝像頭拍攝的圖片悠垛,UIImagePNGRepresentation(UIImage *image)返回的數(shù)據(jù)量大小為199K葡幸,而UIImageJPEGRepresentation(UIImage *image,1.0)返回的數(shù)據(jù)量只有140K夕春,比前者少了50多K;而且如果對(duì)圖片的質(zhì)量要求不那么高的話,還可以通過設(shè)置壓縮系數(shù)進(jìn)一步減少數(shù)據(jù)量港令,降低壓縮系數(shù)后UIImageJPEGRepresentation(UIImage *image, 0.5),返回的數(shù)據(jù)大小只有11K稽鞭,大大壓縮了圖片數(shù)據(jù)量素跺,而且從視圖角度看二蓝,圖片的質(zhì)量并沒有明顯降低。所以指厌,在讀區(qū)圖片數(shù)據(jù)內(nèi)容的時(shí)候刊愚,建議優(yōu)先使用方法UIImageJPEGRepresentation(UIImage *image, CGFloatcompressionQuality)
jpeg :耗時(shí)短
png:耗時(shí)長
代碼:
NSData *data = nil;
if(!UIImagePNGRepresentation(image)) {
data =UIImageJPEGRepresentation(image,0.1);
}else{
data =UIImagePNGRepresentation(image);
}
實(shí)用:
將數(shù)組中的UIImage取出,存為本地PNG圖片
問題: ?通過UIImagePNGRepresentation()方法保存PNG格式圖片時(shí),由于ARC機(jī)制仑乌,會(huì)產(chǎn)生大量臨時(shí)的autorelease對(duì)象百拓,需要等待runloop的autoreleasepool銷毀時(shí)才能銷毀這些對(duì)象。由于for循環(huán)中的臨時(shí)對(duì)象無法及時(shí)釋放晰甚,造成內(nèi)存持續(xù)增長衙传,最終導(dǎo)致程序的不穩(wěn)定,甚至崩潰厕九。
instruments:內(nèi)存暴漲? 盡管代碼中創(chuàng)建了自己的@autoreleasepool蓖捶,但是臨時(shí)對(duì)象仍然沒有被銷毀,仍然以自己的節(jié)奏高速增長扁远。
方案: 使用imageIO存儲(chǔ)PNG圖片
for循環(huán)存png圖片
先增后減:增長峰值為截圖產(chǎn)生的內(nèi)存
另一種方式: 渲染
imageIO: