Python Pillow v2.6.0 paletted PNG(256)如何添加Alpha通道?

时间:2014-10-23 17:45:48

标签: python pillow

我有一个写入图像的numpy数组,一个RGB色图作为调色板添加,剩下的只是一个透明通道(256个值)。我已经尝试过转换为RGBA,LA和其他方法但是,我无法弄清楚如何将这个多值通道添加到顶部作为调色板。

以下是我添加单值透明度通道的示例:

# data = numpy array 1624x3856
im = Image.fromarray(data)
im = im.convert('P')
# cmap is a 768-valued RGB array
im.putpalette(my_cmap)
im.save('filename.png', transparency=0)

我要保存的频道如下:

# len(alpha) = 256
alpha = [0,255,255,255...255,255,255]

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

准备正确的RGBA格式以使用Alpha通道

准备RGB部分后(从上面data.shape看到的问题) 你的栅格图像必须得到相应的Alpha层。

为此,请添加对实例方法的调用

<强> Image.putalpha( anAlphaLAYER )

添加/替换图像中的alpha图层。如果图像没有alpha图层,则会转换为 LA RGBA ,因此在调用此方法之前,请准备好RGB部件。新图层(anAlphaLAYER)必须是 L 1

因此请确保anAlphaLAYER.shapeim.size(X,Y)相匹配。另一种可能性是从整数值创建alpha层并特别修改它的单元格值。

早在numpy.array中完成了完整的RGBA格式,整个问题不会给你带来任何麻烦。

答案 1 :(得分:2)

以下是关于如何确保枕头图像为RGBA的简单示例:

img = Image.open("SOME_RGB_IMAGE.png")

if img.mode == "RGB":
    a_channel = Image.new('L', img.size, 255)   # 'L' 8-bit pixels, black and white
    img.putalpha(a_channel)