最近在更改项目中的一个小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屏,还是普通屏,都可以清晰呈现。
这个是本人的总结,如有疏漏,请指教!😙😗😙😚