使用Pillow的im.resize处理PNG图片时RGB颜色异常如何解决?
解决Pillow resize透明通道伪影问题
问题根源
用Pillow默认参数缩放带透明通道的PNG时,默认插值算法会把透明区域的RGB通道和周围非透明区域的颜色混在一起计算,再叠加透明度,结果就是透明区域冒出红、蓝这类原本没有的伪色。
修复代码
调整代码,用对透明通道友好的插值算法,同时确保颜色模式正确:
from PIL import Image filename = "trees_bg.png" # 先确保图像是RGBA模式,避免颜色模式异常 im = Image.open(filename).convert("RGBA") new_size = (256, 256) # 用LANCZOS插值,对透明区域的处理更精准 resized_img = im.resize(new_size, resample=Image.Resampling.LANCZOS) # 保存时明确指定PNG格式,防止不必要的颜色转换 resized_img.save("resized_trees_bg.png", format="PNG")
版本兼容提示
如果你的Pillow版本低于9.1.0,把Image.Resampling.LANCZOS换成Image.LANCZOS就行。
内容的提问来源于stack exchange,提问作者loonatic
相关产品推荐
相关产品推荐

