1 ios中兩種圖片壓縮的方式

介紹:

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:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容