使用ImageOps无法反转8位每通道的RGB格式PNG图像
问题原因及解决办法
核心原因
你遇到的问题是因为那5张PNG虽然标称是无Alpha的8位RGB格式,但实际可能是索引颜色模式(P模式)——这类PNG会用调色板存储颜色信息,而ImageOps.invert对带调色板的图像处理逻辑有兼容性限制,一旦调色板数据异常(比如缺失、格式不匹配),就会触发你看到的OSError或AttributeError。
而JPG本身都是真RGB模式,所以不会触发这个问题。
验证方法
可以先打印图像模式确认:
from PIL import Image im = Image.open(image_file) print(im.mode) # 如果输出是'P',就说明是索引模式
解决代码
转换为真RGB模式后再反转即可:
from PIL import Image import PIL.ImageOps im = Image.open(image_file) # 先转为RGB模式,再处理 if im.mode != 'RGB': im = im.convert('RGB') inverted_image = ImageOps.invert(im)
内容的提问来源于stack exchange,提问作者Mike Kelley
相关产品推荐
相关产品推荐

