下面这个方法的确能压缩图片,但是图片会变形
//对图片尺寸进行压缩--
- (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {
// Create a graphics image context
UIGraphicsBeginImageContext(newSize);
// Tell the old image to draw in this new context, with the desired
// new size
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Get the new image from the context
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
// End the context
UIGraphicsEndImageContext();
// Return the new image.
return newImage;
}
因为是按照指定尺寸压缩,导致图片压缩之后模糊,失真
按照屏幕的尺寸压缩,则会保证不失真
- (UIImage*)imageCompressWithSimple:(UIImage*)image{
CGSize size = image.size;
CGFloat scale = 1.0;
//TODO:KScreenWidth屏幕宽
CGFloat KScreenWidth = [UIScreen mainScreen].bounds.size.width;
CGFloat KScreenHeight = [UIScreen mainScreen].bounds.size.height;
if (size.width > KScreenWidth || size.height > KScreenHeight) {
if (size.width > size.height) {
scale = KScreenWidth / size.width;
}else {
scale = KScreenHeight / size.height;
}
}
CGFloat width = size.width;
CGFloat height = size.height;
CGFloat scaledWidth = width * scale;
CGFloat scaledHeight = height * scale;
CGSize secSize =CGSizeMake(scaledWidth, scaledHeight);
//TODO:设置新图片的宽高
UIGraphicsBeginImageContext(secSize); // this will crop
[image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];
UIImage* newImage= UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}