iOS圖片壓縮處理

來源:互聯網
上載者:User

標籤:

理解概念

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

  1. “壓” 是指檔案體積變小,但是像素數不變,長寬尺寸不變,那麼品質可能下降。
  2. “縮” 是指檔案的尺寸變小,也就是像素數減少,而長寬尺寸變小,檔案體積同樣會減小。
圖片“壓”處理

對於“壓”的功能,我們可以使用UIImageJPEGRepresentationUIImagePNGRepresentation方法實現,如:

 
123  NSData *imgData = UIImageJPEGRepresentation(image, 0.5); 

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

UIImageJPEGRepresentation方法的官方注釋是:

return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)

關於PNG和JPEG格式壓縮
  1. UIImageJPEGRepresentation函數需要兩個參數:圖片的引用和壓縮係數而UIImagePNGRepresentation只需要圖片引用作為參數.
  2. 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的資料表:

筆者統計了iphone裝置上的全屏圖和原始圖在壓縮前和壓縮後的大小,我們需要根據圖片壓縮後在PC上的清晰度來決定最終選擇哪個壓縮係數。

圖片“縮”處理

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

 
12345678910111213141516171819202122232425262728  /*! *  @author 杜建超, 15-12-01 16:12:01 * *  壓縮圖片至目尺規寸 * *  @param sourceImage 源圖片 *  @param targetWidth 圖片最終尺寸的寬 * *  @return 返回按照源圖片的寬、高比例壓縮至目標寬、高的圖片 */- (UIImage *)compressImage:(UIImage *)sourceImage toTargetWidth:(CGFloat)targetWidth {  CGSize imageSize = sourceImage.size;    CGFloat width = imageSize.width;  CGFloat height = imageSize.height;    CGFloat targetHeight = (targetWidth / width) * height;    UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));  [sourceImage drawInRect:CGRectMake(0, 0, targetWidth, targetHeight)];    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();  UIGraphicsEndImageContext();    return newImage;} 

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

iOS圖片壓縮處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.