需求
服務器人員說圖片最大只能為1M,圖片質量要求盡量清晰,不得裁剪。
思路
先調整分辨率,再調整圖片質量系數
代碼實現
1.調用
NSData *imgData = [Unity reSizeImageData:image maxImageSize:800 maxSizeWithKB:1024.0];
2.實現代碼
/**
* 調整圖片尺寸和大小
*
* @param sourceImage 原始圖片
* @param maxImageSize 新圖片最大尺寸
* @param maxSize 新圖片最大存儲大小
*
* @return 新圖片imageData
*/
+ (NSData *)reSizeImageData:(UIImage *)sourceImage maxImageSize:(CGFloat)maxImageSize maxSizeWithKB:(CGFloat) maxSize
{
if (maxSize <= 0.0) maxSize = 1024.0;
if (maxImageSize <= 0.0) maxImageSize = 1024.0;
//先調整分辨率
CGSize newSize = CGSizeMake(sourceImage.size.width, sourceImage.size.height);
CGFloat tempHeight = newSize.height / maxImageSize;
CGFloat tempWidth = newSize.width / maxImageSize;
if (tempWidth > 1.0 && tempWidth > tempHeight) {
newSize = CGSizeMake(sourceImage.size.width / tempWidth, sourceImage.size.height / tempWidth);
}
else if (tempHeight > 1.0 && tempWidth < tempHeight){
newSize = CGSizeMake(sourceImage.size.width / tempHeight, sourceImage.size.height / tempHeight);
}
UIGraphicsBeginImageContext(newSize);
[sourceImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//調整大小
NSData *imageData = UIImageJPEGRepresentation(newImage,1.0);
CGFloat sizeOriginKB = imageData.length / 1024.0;
CGFloat resizeRate = 0.9;
while (sizeOriginKB > maxSize && resizeRate > 0.1) {
imageData = UIImageJPEGRepresentation(newImage,resizeRate);
sizeOriginKB = imageData.length / 1024.0;
resizeRate -= 0.1;
}
return imageData;
}