前段時(shí)間處理了下圖片上傳壓縮的問(wèn)題爷狈,在這里記錄下植影。iPhone拍攝的照片2-3M可壓縮至30-60KB左右,清晰度還可以接受,如果一次處理多張高清圖淆院,放入子線程中進(jìn)行壓縮
/**
* 圖片上傳壓縮
* @param source_image 原圖片
* @param compressQuality 壓縮系數(shù) 0-1
* 默認(rèn)參考大小30kb,一般用該方法可達(dá)到要求何乎,壓縮系數(shù)可根據(jù)壓縮后的清晰度權(quán)衡句惯,項(xiàng)目里我用的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 壓縮系數(shù) 0-1
* @return imageData
*/
+ (NSData *)resetSizeOfImageData:(UIImage *)source_image referenceSize:(NSInteger)maxSize compressQuality:(CGFloat)compressQuality
{
//先調(diào)整分辨率
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();
//調(diào)整大小
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;
}