我想在“图像”变量中保持透明背景。
如果我写入文件,则图像看起来不错。我的意思是图像具有透明背景。
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变量中保留透明图像对象?
答案 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()