BytesIO用黑色背景替换了PNG文件中的透明度

时间:2018-12-11 10:44:25

标签: python-3.x image python-imaging-library urllib bytesio

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

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

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变量中保留透明图像对象?

1 个答案:

答案 0 :(得分:1)

两件事...


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

所以改变这个:

img = Image.open(ioFile)

对此:

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

第二, OpenCV imshow()无法处理透明性,因此我倾向于使用 Pillow show()方法。像这样:

from PIL import Image

# Do OpenCV stuff
...
...

# Now make OpenCV array into Pillow Image and display
Image.fromarray(numpyImage).show()