網上提供的大都是UIImage的回調,返回image,但是我們使用的時候是作文data文件上傳的,so,很多人在測試完發現這個遞減的壓縮效果還是不錯的,隨即就去用了,殊不知,壓縮后的image轉成data去使用的時候又把圖片變大了~
代碼如下:
/**
*? 壓縮圖片到指定尺寸大小
*
*? @param image 原始圖片
*? @param size? 目標大小
*
*? @return 生成圖片
*/
+(UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{
UIImage * resultImage = image;
UIGraphicsBeginImageContext(size);
[resultImage drawInRect:CGRectMake(00, 0, size.width, size.height)];
UIGraphicsEndImageContext();
return image;
}
/**
*? 壓縮圖片到指定文件大小
*
*? @param image 目標圖片
*? @param size? 目標大小(最大值)
*
*? @return 返回的圖片文件
*/
+(UIImage *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{
if (!image) {
return image;
}
if (kb<1) {
return image;
}
kb*=1024;
CGFloat compression = 0.9f;
CGFloat maxCompression = 0.1f;
NSData *imageData = UIImageJPEGRepresentation(image, compression);
while ([imageData length] > kb && compression > maxCompression) {
compression -= 0.1;
imageData = UIImageJPEGRepresentation(image, compression);
}
//data轉成image后圖片內存會變大,不可用
UIImage *compressedImage = [UIImage imageWithData:imageData];
return compressedImage;
}
所以我們最好直接使用data壓縮,如下處理:
-(NSData *)compressOriginalImage:(UIImage *)image toKb:(NSInteger)kb{
kb*=1024;
CGFloat compression = 0.9f;
CGFloat maxCompression = 0.1f;
NSData *imageData = UIImageJPEGRepresentation(image, compression);
while ([imageData length] > kb && compression > maxCompression) {
compression -= 0.1;
imageData = UIImageJPEGRepresentation(image, compression);
}
return imageData;
}
這樣直接返回data即可