使用jpegData转换UIImage为数据时图片顶部出现白线问题
UIImage转jpegData后顶部出现细线的原因解析
浮点精度引发的像素对齐错误
你在计算newSize时,宽高大概率会得到带小数的浮点值(比如原尺寸和目标尺寸的比例不是整数倍)。当调用image.draw(in: rect)绘制时,非整数坐标的像素无法完美对齐到上下文的像素网格,会在顶部产生1像素的偏移或空白区域,后续JPEG压缩时这个区域会被渲染成可见细线。图像上下文scale参数使用错误
resizeImage方法里把自定义的percentage直接传给了UIGraphicsBeginImageContextWithOptions的scale参数。这里的scale应该对应屏幕的缩放因子(比如UIScreen.main.scale),而非自定义的百分比。scale参数不匹配会导致绘制时像素采样偏差,进而出现边缘细线。JPEG压缩的边缘特性放大问题
JPEG属于有损压缩算法,当图像顶部存在颜色突变的小区域(比如上述的偏移空白),压缩过程中的边缘优化逻辑会将这个区域强化,最终形成明显的细线。
内容的提问来源于stack exchange,提问作者zaid afzal
相关产品推荐
相关产品推荐

