图片压缩失真的问题记录

2017-03-17  本文已影响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屏,还是普通屏,都可以清晰呈现。

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

上一篇 下一篇

猜你喜欢

热点阅读