最近维护了一个别人的项目,使用UIImagePickerController拍照屏幕选择图片然后图片出现严重波纹,起初自己方向搞错了,一直以为是压缩图片压缩系数太小而导致的,调整到无损压缩还是没解决问题,然后我就又怀疑对象变成图片服务器进行了压缩,得知后台没有进行压缩,就又开始整理他的逻辑,UIImagePickerConroller 代理
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey, id> *)info {
UIImage *img = info[UIImagePickerControllerOriginalImage]; //获取原图
self.currentPhoto= img;
}
接下来就是把Self.currentPhoto 传到本页面的UIImageView
接着跳转又将这个Self.currentPhoto传到下一页的UIimageView中
出现了问题 下一页的图片显示出现严重波纹
然后分析结果就是:当多个UIImageView不同的尺寸引用同一个UIImage时,会导致图片显示出现波纹情况,多个UIImageView不能使用同一个UIImage对象
解决方案就是:将UIImage对象进行一个copy传递 这样UIImageView就不会重复拉伸UIImage对象 图像就不会出现失帧问题
还有一种可能是图片太大,UIImageView容器太小造成锯齿现象,需要将UIIMage重新绘制成UIImageView的大小
+ (UIImage*)scaleToSize:(UIImage*)imgsize:(CGSize)size {
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
[img drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
目前是这样解决的
纯属自己理解,描述有误欢迎指教
网友评论