網(wǎng)上提供的大都是UIImage的回調(diào),返回image病涨,但是我們使用的時(shí)候是作文data文件上傳的,so璧坟,很多人在測(cè)試完發(fā)現(xiàn)這個(gè)遞減的壓縮效果還是不錯(cuò)的既穆,隨即就去用了,殊不知雀鹃,壓縮后的image轉(zhuǎn)成data去使用的時(shí)候又把圖片變大了~
代碼如下:
/**
*? 壓縮圖片到指定尺寸大小
*
*? @param image 原始圖片
*? @param size? 目標(biāo)大小
*
*? @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 目標(biāo)圖片
*? @param size? 目標(biāo)大谢霉ぁ(最大值)
*
*? @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轉(zhuǎn)成image后圖片內(nèi)存會(huì)變大,不可用
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即可