python-3.x - BytesIO 用黑色背景替换 PNG 文件中的透明度

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

最佳答案

有两件事...


首先,如果您在使用 Pillow 打开文件时想要并期待 RGBA 图像,最好将您得到的任何内容转换为该图像 - 否则您最终可能会尝试显示调色板索引而不是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()

关于python-3.x - BytesIO 用黑色背景替换 PNG 文件中的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722390/

相关文章:

python - 在Python中更改像素颜色: How to do it faster?

python - Tensorflow Deeplab 图像颜色图去除混淆

python - 通过POST请求发送数据

python - 将连续整数列表的每个可能子集中的整数相乘

java - 使用 Java 裁剪/修剪带有空白空间的 JPG 文件

image - JavaFX 按钮背景图像

java - 为什么这个 JLabel 的 ImageIcon 没有更新?

django - Rest-auth 中的自定义用户模型 : RelatedObjectDoesNotExist

python - 如何帮助 Pylance 了解动态添加的类属性

python - “元组”对象不支持项目分配