經常遇到類似上傳頭像、社交分享等操作的時候,需要對圖片進行裁切,
一般需要限制一個最大值,來限制圖片既要維持寬高比例,又要讓寬高都小於這個最大值
下面這個方法即可滿足需求,當寬高都小於最大值的時候,不對圖片進行壓縮大小。當圖片是豎排版(高>寬)的時候,把圖片的高壓縮到設置的最大值,同時寬按比例壓縮到對應大小。同理,當圖片是橫版(高<寬),把寬設置成最大值,高按比例縮小。
壓縮圖片的原理,是利用Core Graphics來重繪圖片
代碼如下:
/*
*
* 壓縮圖片至目標尺寸
*
* @param sourceImage 源圖片
* @param maxValue 圖片長寬最大值
*
* @return 返回按照源圖片的寬、高比例壓縮至目標寬、高的UIImage圖片
*/
- (UIImage *)resizeImage:(UIImage *)sourceImage toMaxWidthAndHeight:(CGFloat)maxValue {
CGSize imageSize = sourceImage.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
if (width > height && width > maxValue) {
height = height * (maxValue / width);
width = maxValue;
}else if (height > width && height > maxValue) {
width = width * (maxValue / height);
height = maxValue;
}else {
return sourceImage;
}
UIGraphicsBeginImageContext(CGSizeMake(width, height));
[sourceImage drawInRect:CGRectMake(0, 0, width, height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}