【发布时间】:2020-04-30 20:05:52
【问题描述】:
这段代码:
import numpy
import PIL.Image
base = PIL.Image.open('grin-emoji-by-twitter.png').convert('RGBA')
base2 = numpy.array(base)
print(base2.shape)
print(base2)
产生以下输出:
(512, 512, 4) # 512 px by 512 px with RGBA channels
[[[ 71 112 76 0] # list of all the RGBA pixels...
[ 71 112 76 0] # ...visible as an olive green shade when saved
[ 71 112 76 0]
# ...and so on...
显示左上角的像素:虽然它们应该是透明的([0 0 0 0]),但它们不是一些奇怪的橄榄绿色阴影([71 112 76 0])(左图:原图,右图:“已处理”):
这个错误很奇怪,因为这是打开 RGBA 图像和convert them to NumPy 的“正确”方式。使用 numpy.asarray 也无济于事。
复制的原始文件是here,虽然它是彩色映射的(调色板图像),这可能是我的问题的根源。但是我使用.convert('RGBA') 将其从彩色映射转换为RGBA 图像。使用的 PIL 版本是 6.1.0。
【问题讨论】:
-
你是如何从数组中生成行为不端的文件的?您的代码示例未显示。
-
@AKX 当我们遇到
print语句时,图像已经是橄榄色了。所以错误在于加载和添加保存代码只会分散注意力。 -
在将图像加载到代码中之前,我尝试了在 Gimp 中将图像转换为 RGBA 的明显替代解决方案,但
imageio无论如何都无法将透明层保存到 GIF 中。唉,我得用另一个库了。 -
@xjcl 关于 Pillow 中使用的不同模式的一些说明,请参阅下面的答案。此外,正如 AKX 之前所要求的,请提供生成“错误”输出的代码。据推测,alpha 通道没有正确导出,例如保存为 JPG 时可能发生这种情况。
-
另外,@xjcl – 你最终想要达到什么目的?最后的评论稍微说明了一些事情,但是..?
标签: python python-3.x image-processing python-imaging-library