网上提供的大都是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即可