上传前获取图片的质量以及尺寸(先进行尺寸的压缩再进行质量的压缩)
1.获取图片的质量:
先将UIImage对象转成NSData对象,再通过NSData对象的length(单位是byte)获取。
(疑问:获取到的图片质量和原图片质量不一致)
2.获取图片的尺寸:
通过UIImage对象的size获取
图片质量不一致
使用UIImage imageNamed+ UIImageJPEGRepresentation(img, 1)得到的图片质量大于原图片质量
看一些资料说压缩参数compressionQuality取0.5比较接近原图片大小。
对图片的尺寸进行等比缩减
尺寸压缩之后质量必定压缩了
对图片的质量进行压缩
(疑问:压缩之后的图片使用UIImageWriteToSavedPhotosAlbum方法保存到相册之后变大了)
保存到相册的方法
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest * req = [PHAssetChangeRequest creationRequestForAssetFromImage:img];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"😊保存图片成功");
}
if (error) {
NSLog(@"保存图片失败:%@", error);
}
}];
对比了下,发现上面利用PHPhotoLibrary和UIImageWriteToSavedPhotosAlbum保存后图片的质量是一样的。
压缩图片质量的方法:
+ (UIImage *)compressImageQuality:(UIImage *)image toByte:(NSInteger)maxLength {
CGFloat compression = 1;
NSData *data = UIImageJPEGRepresentation(image, compression);
if (data.length < maxLength) return image;
CGFloat max = 1;
CGFloat min = 0;
for (int i = 0; i < 6; ++i) {
compression = (max + min) / 2;
data = UIImageJPEGRepresentation(image, compression);
if (data.length < maxLength * 0.9) {
min = compression;
} else if (data.length > maxLength) {
max = compression;
} else {
break;
}
}
UIImage *resultImage = [UIImage imageWithData:data];
return resultImage;
}
压缩图片尺寸的方法
//压缩图片尺寸
- (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
网友评论