You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pillow基于RGBA调色板与P模式图像生成RGBA图像问题求助

解决方案

根因

  • Image.putpalette 默认以RGB 3通道格式解析输入的调色板数据,传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:06:00