2

我想在我的“图像”变量中保持透明背景。

如果我写入文件,图像看起来很好。我的意思是图像具有透明背景。

with urllib.request.urlopen(request) as response:
     imgdata = response.read()
     with open("temp_png_file.png", "wb") as output:
         output.write(imgdata)

但是,如果我将图像数据保存在 BytesIO 中,透明背景就会变成黑色背景。

with urllib.request.urlopen(request) as response:
     imgdata = response.read()
ioFile = io.BytesIO(imgdata) 
img = Image.open(ioFile)
img.show()

(上面的代码段,img.show 行显示了一个黑色背景的图像。)

如何在 img 变量中保留透明图像对象?

4

1 回答 1

3

两件事情...


首先,如果您在使用 . 打开文件时想要并期望 RGBA 图像Pillow,最好将您得到的任何内容转换为该图像 - 否则您最终可能会尝试显示调色板索引而不是 RGB 值:

所以改变这个:

img = Image.open(ioFile)

对此:

img = Image.open(ioFile).convert('RGBA')

其次,OpenCVimshow()不能处理透明度,所以我倾向于使用Pillowshow()方法。像这样:

from PIL import Image

# Do OpenCV stuff
...
...

# Now make OpenCV array into Pillow Image and display
Image.fromarray(numpyImage).show()
于 2018-12-11T16:53:03.393 回答