美文网首页iOS记录iOS常用
iOS开发中图片质量的压缩

iOS开发中图片质量的压缩

作者: 梁森的简书 | 来源:发表于2020-11-04 17:03 被阅读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;
    }
    

    相关文章

      网友评论

        本文标题:iOS开发中图片质量的压缩

        本文链接:https://www.haomeiwen.com/subject/jcetmctx.html