使用PIL修改JPG图像像素颜色后更改不生效问题咨询
修改图像指定像素不生效的原因及解决办法
你写的两种像素修改逻辑本身没有错误,内存中修改后的像素值符合预期,问题出在图像保存格式的特性上:
你当前使用的JPG是有损压缩格式,为了降低文件体积,压缩算法会对相邻像素块做统一优化调整,单个像素的修改会被算法优化覆盖,导致重新读取文件后像素值和设置值存在偏差。
修复方案
- 方案一(推荐,完全精准):将图像保存为无损格式,比如PNG、BMP、TIFF,仅需要修改保存时的文件后缀即可:
示例代码修改:将img1.save("randomImage02.jpg")替换为img1.save("randomImage02.png") - 方案二(仅适合必须用JPG的场景):保存JPG时开启最高质量参数,尽可能降低压缩带来的像素偏差:
示例代码修改:img1.save("randomImage02.jpg", quality=100, subsampling=0)
注意:该方案仍属于有损压缩,极端场景下还是可能存在像素值偏差,对精度要求高的场景请优先使用无损格式。
内容的提问来源于stack exchange,提问作者KingA
相关产品推荐
相关产品推荐

