上周遇到了截取图片部分不清晰的问题,一开始以为是后台返回的图片不清晰就没去理会(之前忙着开发新功能没时间),上周五刚好有时间追溯了一下问题的缘由,原来是截取屏幕后图片质量就变低了,上周五用了两个小时的时间没有解决,今天经过不断地尝试终于解决了。
1. 先说一下
UIGraphicsBeginImageContext(view.frame.size)
UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0)
上面方法生成的图片质量会低于下面方法,并且这也是主要的问题所在,当时感觉已经解决了问题,但是发现图片截取之后与想要的效果差很多
而我想要的是中间部分的图片,这时我就走了一些弯路,以为可能还有其他新的方法,自己搜了一圈,朋友帮忙搜了一圈发现没有,然后只能又回到现有情况下解决问题,既然图片已经清晰了那就是截取的区域问题了,我分别打印了
UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnimage;
// UIGraphicsBeginImageContext(view.frame.size);
// [view.layer renderInContext:UIGraphicsGetCurrentContext()];
// UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// UIGraphicsEndImageContext();
// return image;
以下两种image的大小都是 375 x 667 , 但是为什么使用同样的rect截取 显示的是不同的区域呢
只能继续往下找
CGRect captureRect =CGRectMake(2,topHeight *2,(self.cropFrame.size.width-2) *2,(self.cropFrame.size.height-2)*2);
CGImageRef sourceImageRef = [[self shotWithView:self.view]CGImage];
CGImageRef newImageRef =CGImageCreateWithImageInRect(sourceImageRef, captureRect);
UIImage*newImage = [UIImage imageWithCGImage:newImageRef];
我又分别打印了sourceImageRef 发现 两个方法的size这时候是不一样的 一个是 375x667,另一个是375x1134所以截取的区域rect全部x2解决了(当然还有3倍屏的情况需要判断屏幕尺寸来进行x3),也算优化了项目里一个一直被忽视的问题(我感觉很严重的问题),下面是优化前和优化后的图片(只看清晰度即可)这是在网上找的demo以便调试,自己项目内的已完美解决,最近遇到的比较难处理的问题,记录一下