iOS圖片壓縮處理

首先,我們必須明確圖片的壓縮其實是兩個概念:

“壓” 是指文件體積變小,但是像素數不變,長寬尺寸不變,那么質量可能下降。

“縮” 是指文件的尺寸變小,也就是像素數減少,而長寬尺寸變小,文件體積同樣會減小。

圖片“壓”處理

對于“壓”的功能,我們可以使用UIImageJPEGRepresentation或UIImagePNGRepresentation方法實現,如:

NSData *imgData=UIImageJPEGRepresentation(image, 0.5);

第一個參數是圖片對象,第二個參數是壓的系數,其值范圍為0~1。

關于PNG和JPEG格式壓縮

UIImageJPEGRepresentation函數需要兩個參數:圖片的引用和壓縮系數而UIImagePNGRepresentation只需要圖片引用作為參數.

UIImagePNGRepresentation(UIImage \*image)要比UIImageJPEGRepresentation(UIImage* image, 1.0)返回的圖片數據量大很多.

同樣的一張照片, 使用UIImagePNGRepresentation(image)返回的數據量大小為199K,而UIImageJPEGRepresentation(image, 1.0)返回的數據量大小只為140K,比前者少了59K.

如果對圖片的清晰度要求不是極高,建議使用UIImageJPEGRepresentation,可以大幅度降低圖片數據量.比如,剛才拍攝的圖片,通過調用UIImageJPEGRepresentation(image, 1.0)讀取數據時,返回的數據大小為140K,但更改壓縮系數為0.5再讀取數據時,返回的數據大小只有11K,大大壓縮了圖片的數據量,而且清晰度并沒有相差多少,圖片的質量并沒有明顯的降低。因此,在讀取圖片數據內容時,建議優先使用UIImageJPEGRepresentation,并可根據自己的實際使用場景,設置壓縮系數,進一步降低圖片數據量大小。

提示:壓縮系數不宜太低,通常是0.3~0.7,過小則可能會出現黑邊等。

我們看一下筆者使用UIImageJPEGRepresentation的數據表:

圖片“縮”處理

通過[sourceImage drawInRect:CGRectMake(0, 0, targetWidth, targetHeight)]可以進行圖片“縮”的功能。如下是筆者對圖片尺寸縮的api:

- (UIImage*)compressImage:(UIImage*)sourceImage toTargetWidth:(CGFloat)targetWidth {CGSizeimageSize = sourceImage.size;CGFloatwidth = imageSize.width;CGFloatheight = imageSize.height;CGFloattargetHeight = (targetWidth / width) * height;

UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));

[sourceImage drawInRect:CGRectMake(0,0, targetWidth, targetHeight)];UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();returnnewImage;

}

我們對圖片只“壓”而不縮,有時候是達不到我們的需求的。因此,適當地對圖片“縮”一“縮“尺寸,就可以滿足我們的需求。

demo


//圖片壓縮處理

UIImage*img;

CGSizeimagesize = img.size;

if(imagesize.width>700) {

imagesize.width=700;

}

img = [weakSelf compressImage:imgto TargetWidth:imagesize.width];

NSData*imageData =UIImageJPEGRepresentation(img,0.5);

img = [UIImage imageWithData:imageData];

NSLog(@"%f",img.size.width);

NSLog(@"%@",img);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容