Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pizz v2.6.0调色板PNG(256)如何添加Alpha通道?_Python_Pillow - Fatal编程技术网

Python Pizz v2.6.0调色板PNG(256)如何添加Alpha通道?

Python Pizz v2.6.0调色板PNG(256)如何添加Alpha通道?,python,pillow,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(m

我有一个写入图像的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]
任何帮助都将不胜感激。

为使用Alpha通道准备正确的RGBA格式 准备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格式,整个问题不会给您带来任何麻烦。

下面是一个简单的示例,说明如何确保枕头图像是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)

打印数据。shape
向您展示了什么?
打印数据。shape
提供
(16243856)
打印im.size
提供
(38561624)
RGBA模式的Numpy阵列应携带(4x8位像素,[R,G,B]-带透明遮罩的真彩色)。你的代码在哪里失败了?这段代码很有效,但是,每次我尝试在图像顶部放置alpha通道时,它都不喜欢我。当我如上所述保存图像时,它有一个单值alpha通道[0],而不是我想将其保存为[0255255,…]的通道。您的代码不会“将alpha通道放在图像顶部”。
data.shape
im.size
都不匹配
alpha.shape
那么,你是说
Image.new('L',im.size,255)
?我已经用大小测试过了,它与原始图像相同。你说早在numpy.array中就完成了完整的RGBA格式是什么意思?早在numpy中,RGBA格式反映了有史以来最快的实践/方法,即直接在numpy阵列中操作[R,G,B]+[A]-层(16243856,4),与较慢的PIL/Pillow逐像素模式相反,它只会最终转换/保存为请求的文件格式。所有的计算机视觉工具和实用程序都是这样工作的。我将使用fromarray方法创建一个图像,然后转换为“P”类型并保存?我不必使用putpallete方法,也不必使用transparency=0参数,并且在所有通道都保持tact的情况下仍保留一个调色板png?或者您也可以使用OpenCV2工具来加快速度。