開發(fā)中關于圖片處理的地方非常常見根时,這里分享一下我在處理圖片壓縮的時候遇到的坑儿惫,
圖片壓縮的2種方法
第一:
NSData *data =?UIImageJPEGRepresentation(image,0.5)
或者來壓縮,這里返回的data是在原圖片上去掉很多信息(alpha通道等)剿涮,并且格式為jpeg奢赂,當操作 newImage = [UIImage imageWithData:data];?newImage的imageData回比的data的字節(jié)大,這里屬于正常的窍株;
第二:drawInRect ,重繪
/**
壓縮上傳圖片
@param image 原圖片
@param maxLength 需要上傳的圖片文件大小
@return data
*/
+(NSData *)imageCompressWith: (UIImage *)image maxLength: (CGFloat )maxLength{
? ? NSData *imageData = UIImageJPEGRepresentation(image, 1);
? ? if (imageData.length < maxLength) return imageData;
? ? CGFloat max = 1;
? ? CGFloat min = 0;
? ? UIImage *newImage = image;
? ? NSData * data;
? ? for (int i = 0; i < 6; i ++) {
? ? ? ? CGFloat compression = (max + min) * 0.5;
? ? ? ? data = UIImageJPEGRepresentation(newImage, compression);
? ? ? ? CGFloat length = data.length;
? ? ? ? if (length < maxLength * 0.9) {
? ? ? ? ? ? min = compression;
? ? ? ? }else if (length > maxLength) {
? ? ? ? ? ? max = compression;
? ? ? ? }else {
? ? ? ? ? ? break;
? ? ? ? }
? ? }
? ? if (data.length < maxLength) return data;
newImage = [UIImage imageWithData:data];
//? ? 重繪
? ? for (int i = 1; i < 6; i ++) {
?? ? ? ?int width = image.size.width * (1-i*0.1);
? ? ? ? int height = image.size.height * (1-i*0.1);
? ? ? ? CGSize size = CGSizeMake(width, height);
? ? ? ? UIGraphicsBeginImageContext(size);
? ? ? ? [newImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
? ? ? ? newImage = UIGraphicsGetImageFromCurrentImageContext();
? ? ? ? UIGraphicsEndImageContext();
? ? ? ? data = UIImageJPEGRepresentation(newImage, 1);
? ? ? ? if (data.length < maxLength) {
? ? ? ? ? ? break;
? ? ? ? }
? ? }
?? ?return data;
}
用戶上傳的圖片可能亂七八糟,大小不一攻柠,我們采用一個固定的壓縮參數(shù)去壓縮圖片總是會有問題
上面代碼是我最終采用的方法球订,這里返回的NSData就可以拿來直接上傳給咱們的服務器了