前段時間處理了下圖片上傳壓縮的問題,在這里記錄下。iPhone拍攝的照片2-3M可壓縮至30-60KB左右,清晰度還可以接受,如果一次處理多張高清圖,放入子線程中進行壓縮
/**
* 圖片上傳壓縮
* @param source_image 原圖片
* @param compressQuality 壓縮系數 0-1
* 默認參考大小30kb,一般用該方法可達到要求,壓縮系數可根據壓縮后的清晰度權衡,項目里我用的0.2??
*/
+ (NSData *)resetSizeOfImageData:(UIImage *)source_image compressQuality:(CGFloat)compressQuality
{
return [self resetSizeOfImageData:source_image referenceSize:30 compressQuality:compressQuality];
}
/**
* 圖片上傳壓縮
* @param source_image 原圖片
* @param referenceSize 上傳的參考大小**KB
* @param compressQuality 壓縮系數 0-1
* @return imageData
*/
+ (NSData *)resetSizeOfImageData:(UIImage *)source_image referenceSize:(NSInteger)maxSize compressQuality:(CGFloat)compressQuality
{
//先調整分辨率
CGSize newSize = CGSizeMake(source_image.size.width, source_image.size.height);
NSInteger tempHeight = newSize.height / 1024;
NSInteger tempWidth = newSize.width / 1024;
if (tempWidth > 1.0 && tempWidth > tempHeight) {
newSize = CGSizeMake(source_image.size.width / tempWidth, source_image.size.height / tempWidth);
}
else if (tempHeight > 1.0 && tempWidth < tempHeight){
newSize = CGSizeMake(source_image.size.width / tempHeight, source_image.size.height / tempHeight);
}
UIGraphicsBeginImageContext(newSize);
[source_image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//調整大小
NSData *imageData = UIImageJPEGRepresentation(newImage,1.0);
NSUInteger sizeOrigin = [imageData length];
NSUInteger sizeOriginKB = sizeOrigin / 1024;
if (sizeOriginKB > maxSize) {
NSData *finallImageData = UIImageJPEGRepresentation(newImage,compressQuality);
return finallImageData;
}
return imageData;
}