iOS 圖片壓縮----微信圖片處理策略
阿新 • • 發佈:2019-02-10
iOS微信朋友圈圖片處理策略
最近看了一篇微信朋友圈圖片處理的部落格, 我用程式碼簡單的實現了一下,大家如果發現有不對的地方, 還請指正
壓縮效果還不錯,在保證能看清的前提下,極大的縮小了圖片大小
具體演算法:
1: 寬高均小於1280的, 不做處理;
2: 寬高均大於1280,
2.1:寬高比大於2 既W > 2H,取 H = 1280, W等比縮放;
2.2:高寬比大於2 既W < 0.5H, 取 W = 1280, H等比縮放;
2.3:寬高比介於 0.5到2之間,取寬或者高 為1280, 另一邊等比縮放;
3:寬或者高大於1280;
3.1:寬高比大與2(寬圖) 或者小於0.5(長圖) 大小不變, 可以做壓縮圖片質量;
3.2:寬大於高, 取較大值W = 1280, H等比壓縮;
3.3:高大於寬, 去較大值H = 1280. W等比壓縮;
一般取壓縮質量為0.5即可,既
[NSUtil imageWithOriginalImage:image quality:0.5];
注:一下方法都寫在NSUtil這個工具類裡, 裡面還有很多其他的方法,喜歡的同學可以去我的GitHub上下載.在Util那個檔案下
具體實現程式碼如下:
#pragma mark - 圖片 /** 壓縮圖片*/ + (UIImage *)imageWithOriginalImage:(UIImage *)image{ // 寬高比 CGFloat ratio = image.size.width/image.size.height; // 目標大小 CGFloat targetW = 1280; CGFloat targetH = 1280; // 寬高均 <= 1280,圖片尺寸大小保持不變 if (image.size.width<1280 && image.size.height<1280) { return image; } // 寬高均 > 1280 && 寬高比 > 2, else if (image.size.width>1280 && image.size.height>1280){ // 寬大於高 取較小值(高)等於1280,較大值等比例壓縮 if (ratio>1) { targetH = 1280; targetW = targetH * ratio; } // 高大於寬 取較小值(寬)等於1280,較大值等比例壓縮 (寬高比在0.5到2之間 ) else{ targetW = 1280; targetH = targetW / ratio; } } // 寬或高 > 1280 else{ // 寬圖 圖片尺寸大小保持不變 if (ratio>2) { targetW = image.size.width; targetH = image.size.height; } // 長圖 圖片尺寸大小保持不變 else if (ratio<0.5){ targetW = image.size.width; targetH = image.size.height; } // 寬大於高 取較大值(寬)等於1280,較小值等比例壓縮 else if (ratio>1){ targetW = 1280; targetH = targetW / ratio; } // 高大於寬 取較大值(高)等於1280,較小值等比例壓縮 else{ targetH = 1280; targetW = targetH * ratio; } } // 注:這些方法是NSUtil這個工具類裡的 image = [[NSUtil alloc] imageCompressWithImage:image targetHeight:targetH targetWidth:targetW]; return image; } /** 重繪*/ - (UIImage *)imageCompressWithImage:(UIImage *)sourceImage targetHeight:(CGFloat)targetHeight targetWidth:(CGFloat)targetWidth { // CGFloat targetHeight = (targetWidth / sourceImage.size.width) * sourceImage.size.height; UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight)); [sourceImage drawInRect:CGRectMake(0,0,targetWidth, targetHeight)]; UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } /** 壓縮圖片 壓縮質量 0 -- 1*/ + (UIImage *)imageWithOriginalImage:(UIImage *)image quality:(CGFloat)quality{ UIImage *newImage = [self imageWithOriginalImage:image]; NSData *imageData = UIImageJPEGRepresentation(newImage, quality); return [UIImage imageWithData:imageData]; } /** 壓縮圖片成Data*/ + (NSData *)dataWithOriginalImage:(UIImage *)image{ return UIImageJPEGRepresentation([self imageWithOriginalImage:image], 1); }