美文网首页
图片压缩失真的问题记录

图片压缩失真的问题记录

作者: 乌拉大王 | 来源:发表于2017-03-17 17:42 被阅读51次

    最近在更改项目中的一个小bug:图片上传后,后台看到的图片太过模糊。现在做一些更改。

    1、之前都是按网上别的资料写的这个方法:


    /**

    *  压缩图片

    *  image:将要压缩的图片  size:压缩后的尺寸

    */

    - (UIImage *)originalImage:(UIImage *)image scaledToSize:(CGSize)newSize

    {

    UIGraphicsBeginImageContext(newSize);

    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;//返回的就是已经改变的图片

    }


    然额,返回的图片还是模糊的😳


    2 、后来,又重新找了新方法:


    /**

    *  压缩图片

    *  image:将要压缩的图片  size:压缩后的尺寸

    */

    // 下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了

    - (UIImage *)originalImage:(UIImage *)image scaledToSize:(CGSize)newSize

    {

    UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);

    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;

    }


    搞定!🤗

    UIGraphicsBeginImageContext(size);其实就相当于UIGraphicsBeginImageContextWithOptions(size, NO, 1.0);之所以使用这个方法生成的图片不清晰,就是因为这个1.0。

    UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);其中size就是作图的size,opaque意思是 不透明的 ,scale是缩放因子;

    这里相当于scale是1.0,而retina屏幕的像素肯定不是一倍像素,所以我们需要手动处理scale,用 UIGraphicsBeginImageContextWithOptions(size, NO, 0.0)这个方法去作图。0.0的意思就是自动调整缩放因子以适配显示屏,无论是Retina屏,还是普通屏,都可以清晰呈现。

    这个是本人的总结,如有疏漏,请指教!😙😗😙😚

    相关文章

      网友评论

          本文标题:图片压缩失真的问题记录

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