美文网首页iOS图片
iOS开发图片压缩的两种方式2019-01-18

iOS开发图片压缩的两种方式2019-01-18

作者: 噜噜噜噜噜噜噜噜 | 来源:发表于2019-01-18 10:01 被阅读0次

    工作中遇到需要将图片压缩之后上传的需求。经过多方查询资料,目前总结出来两种方式总结一下备用。

    1、第一种方法,基本上是无损压缩(肉眼基本看不出差别,精度基本不变)

    UIImageJPEGRepresentation(image, compression)
    这个方法可以将iPhone拍摄的照片压缩到几百Kb的极限值,到极限值之后不管compression这个参数多小,该函数返回的数据大小都不会再改变。也就是说这个方法的压缩是有最小值的,得到的是jpg格式。
    另外有一个方法UIImagePNGRepresentation(<#UIImage * _Nonnull image#>)这个方法得到的数据会比之前那个方法得到的数据占用空间更大。

    2、第二种方法,基本上就是将image重新设定像素大小达到压缩的目的 (改变尺寸)

    为了达到压缩的目的,这种方法是有损的,就是会降低图片质量。

    //压缩图片(将图片重画)
    - (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize {
        //首先根据image的size的长宽比和newSize进行设置新图片的大小(为了达到等比例缩放不变形的目的)
        CGFloat wTmp;
        CGFloat hTmp;
        CGSize imgSize = image.size;
        if (imgSize.width > imgSize.height) {
            wTmp=newSize.width;
            hTmp = imgSize.height * wTmp / imgSize.width;
        } else {
            hTmp=newSize.height;
            wTmp = imgSize.width * hTmp / imgSize.height;
        }
    
        // Create a graphics image context
        UIGraphicsBeginImageContext(CGSizeMake(wTmp, hTmp));
    
        // Tell the old image to draw in this new context, with the desired
        // new size
        [image drawInRect:CGRectMake(0,0,wTmp,hTmp)];
    
        // Get the new image from the context
        UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    
        // End the context
        UIGraphicsEndImageContext();
    
        // Return the new image.
        return newImage;
    }
    

    这种方法的到的图片,newSize越小质量越差,但是得到的图片占用内存越小。设置多大的newSize自己斟酌决定。

    3、温馨提示

    综合一下自己平常在开发中常用的就是,先使用第一种方法保持精度不变,compression选择0.6或者0.7进行第一次压缩,然后再用第二种方法进行尺寸压缩,得到的就是我们最终想要的图片。

    相关文章

      网友评论

        本文标题:iOS开发图片压缩的两种方式2019-01-18

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