图片压缩失真的问题记录

最近在更改项目中的一个小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屏,还是普通屏,都可以清晰呈现。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容