Python 3.x RGBA图像未与枕头和tkinter一起显示
我正试图得到一个PNGA图像显示在我的UI使用枕头和Tkinter。我在macOS上使用Python3.7.7Python 3.x RGBA图像未与枕头和tkinter一起显示,python-3.x,macos,tkinter,python-imaging-library,python-3.7,Python 3.x,Macos,Tkinter,Python Imaging Library,Python 3.7,我正试图得到一个PNGA图像显示在我的UI使用枕头和Tkinter。我在macOS上使用Python3.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.Fra
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通道会出现一个黑框
任何帮助都将不胜感激
图像:
我不明白您想做什么,但问题是您图像中的所有信息都在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()
请注意,您可以使用自制在macOS上轻松安装ImageMagick:
brew install imagemagick
如果您在那里处理图像,也可以获得以下软件包:
brew install pngcheck exiftool jhead
我不明白你想做什么,但问题是你图像中的所有信息都在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()
请注意,您可以使用自制在macOS上轻松安装ImageMagick:
brew install imagemagick
如果您在那里处理图像,也可以获得以下软件包:
brew install pngcheck exiftool jhead
实际上,当我输入
img=ImageTk.PhotoImage(img.convert(“RGB”))
行时,我得到了一个错误。你确定这是对的吗?是的,我没有错。我在macOS上使用Python 3.7.7和Pizzle 7.1.2,如果这很重要的话。是的,我认为这很重要,我在Python 3.7中运行了它,它成功了。只是为了澄清一下,图像出现了,或者黑匣子出现了?我得到了一个黑匣子。我不知道错误是什么,因为我不熟悉RGBA Images。当我输入img=ImageTk.PhotoImage(img.convert(“RGB”)
行时,我实际上遇到了一个错误。你确定这是对的吗?是的,我没有错。我在macOS上使用Python 3.7.7和Pizzle 7.1.2,如果这很重要的话。是的,我认为这很重要,我在Python 3.7中运行了它,它成功了。只是为了澄清一下,图像出现了,或者黑匣子出现了?我得到了一个黑匣子。我不知道错误是什么,因为我不熟悉RGBA ImagesHanks——我没有意识到颜色是反转的。谢谢——我没有意识到颜色是反转的。