iOS记录iOS常用

iOS开发中图片质量的压缩

2020-11-04  本文已影响0人  梁森的简书

上传前获取图片的质量以及尺寸(先进行尺寸的压缩再进行质量的压缩)

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;
}
上一篇下一篇

猜你喜欢

热点阅读