我有一个写入图像的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]
非常感谢任何帮助。
答案 0 :(得分:3)
准备RGB部分后(从上面data.shape
看到的问题)
你的栅格图像必须得到相应的Alpha层。
为此,请添加对实例方法的调用
<强> Image.putalpha( anAlphaLAYER )
强>
添加/替换图像中的alpha图层。如果图像没有alpha图层,则会转换为 LA 或 RGBA ,因此在调用此方法之前,请准备好RGB部件。新图层(anAlphaLAYER
)必须是 L 或 1 。
因此请确保anAlphaLAYER.shape
与im.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)