【问题标题】:RGBA image not showing up with Pillow and tkinterPillow 和 tkinter 未显示 RGBA 图像
【发布时间】:2020-05-05 17:49:46
【问题描述】:

我正在尝试使用 Pillow 和 Tkinter 让 PNGA 图像显示在我的 UI 中。我在 macOS 上使用 python 3.7.7。

import sys
import tkinter as tk
from PIL import ImageTk, Image

path = "path_to_image.png"
im = Image.open(path)
print(im.mode) # prints RGBA

root = tk.Tk()

root.title("Karel")

frame = tk.Frame(root)
frame.pack()
canvas = tk.Canvas(frame, bg="white", width=500, height=500)
canvas.pack()
img = Image.open(path)  # PIL solution
img = img.resize((250, 250), Image.ANTIALIAS) #The (250, 250) is (height, width)
img = ImageTk.PhotoImage(img) # convert to PhotoImage
image = canvas.create_image(150,150, image = img)

root.mainloop()

当我尝试使用没有 Alpha 通道的图像时,它可以工作。添加img = ImageTk.PhotoImage(img.convert("RGB")) 以删除Alpha 通道会出现一个黑框。

任何帮助将不胜感激。

图片:

【问题讨论】:

  • 当我输入img = ImageTk.PhotoImage(img.convert("RGB")) 行时,我实际上得到了一个错误。你确定这是正确的吗?
  • 是的——我没有收到错误。如果这很重要,我在 macOS 上使用 Python 3.7.7 和 Pillow 7.1.2..
  • 是的,我认为这很重要,我在 python 3.7 中运行它并且它有效。
  • 澄清一下,是图像出现了,还是黑框出现了?
  • 我有一个黑匣子。我不知道错误是什么,因为我不熟悉 RGBA 图像

标签: python-3.x macos tkinter python-imaging-library python-3.7


【解决方案1】:

我不明白您要做什么,但问题是您图像中的所有信息都在 alpha(即透明度)通道中。我可以像这样在终端中使用 ImageMagick 拆分 R、G、B 和 A 通道并将它们并排放置来证明这一点:

magick image.png -channel RGBA -separate -background none +smush 10  result.png

因此,红色、绿色和蓝色通道都为零(即黑色),Alpha 通道在透明的地方有白色,你可以看到 RGB 黑色,在透明的地方有黑色。

所以,关于您的问题,由于所有信息都在 alpha 通道中,您可以只将 alpha 通道作为您的图像:

#!/usr/bin/env python3

import tkinter as tk
from PIL import ImageTk, Image

root = tk.Tk()

root.title("Karel")

frame = tk.Frame(root)
frame.pack()
canvas = tk.Canvas(frame, bg="red", width=500, height=500)
canvas.pack()
path = "image.png"
img = Image.open(path).getchannel('A')   # Take just alpha channel
img = img.point(lambda a: 255-a)         # Invert black/white
img = img.resize((250, 250), Image.ANTIALIAS)
img = ImageTk.PhotoImage(img)
image = canvas.create_image(150,150, image = img)

root.mainloop()


请注意,您可以使用 homebrew 在 macOS 上轻松安装 ImageMagick

brew install imagemagick

如果您使用图像,当您在那里时,也可以获取这些包:

brew install pngcheck exiftool jhead

【讨论】:

  • 谢谢——我没有意识到颜色是倒置的。
猜你喜欢
  • 2020-04-13
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
相关资源
最近更新 更多