Pillow基于RGBA调色板与P模式图像生成RGBA图像问题求助
解决方案
根因
Image.putpalette默认以RGB3通道格式解析输入的调色板数据,传入RGBA 4通道调色板时会出现解析错位,导致颜色映射错误- P模式图像的透明度信息需要显式配置,否则转RGBA格式时不会读取调色板内的alpha通道值
修正代码
from PIL import Image, ImageDraw, ImagePalette palette_data = [0,0,0,0, 0,0,255,255] palette = ImagePalette.ImagePalette('RGBA', palette_data) labels = Image.new('P', (100,100)) drawer = ImageDraw.Draw(labels) drawer.ellipse(((25,25),(75,75)), fill=1) # 指定调色板的解析模式为RGBA labels.putpalette(palette, rawmode='RGBA') # 配置每个索引对应的透明度值 labels.info['transparency'] = [palette_data[i*4 + 3] for i in range(len(palette_data)//4)] out = labels.convert('RGBA') out.save('out.png','PNG')
替代方案
如果不需要保留P模式的中间处理流程,可以直接创建RGBA图像完成绘制,逻辑更简洁:
from PIL import Image, ImageDraw out = Image.new('RGBA', (100,100), (0,0,0,0)) drawer = ImageDraw.Draw(out) drawer.ellipse(((25,25),(75,75)), fill=(0,0,255,255)) out.save('out.png','PNG')
内容的提问来源于stack exchange,提问作者GGG
相关产品推荐
相关产品推荐

