【问题标题】:Tkinter, overlay foreground image on top of a background image with transparencyTkinter,在具有透明度的背景图像之上覆盖前景图像
【发布时间】:2014-05-26 19:17:30
【问题描述】:

我有 2 张 png 格式的图片。 第二张图片,是一个透明背景的形状。

第一张图片:

第二张图片:

我无法在给定坐标 (x,y) 处将第二张图片放在第一张图片之上,而第一张图片通过第二张图片的透明区域可见。

想要的结果:

import Tkinter
import Image, ImageTk

# open an image
head = Image.open('background2.png')
hand = Image.open('foreground2.png')
root = Tkinter.Tk()  # A root window for displaying objects

head.paste(hand,(20,20))

# Convert the Image object into a TkPhoto object
tkimage = ImageTk.PhotoImage(head)

root.mainloop() # Start the GUI

显示一个空的 tk 窗口。

【问题讨论】:

  • 您没有将图像添加到任何小部件。您将需要一个标签或画布。

标签: python image tkinter transparency


【解决方案1】:

谢谢布莱恩。 明白了,除了label,透明度问题从另一个问题here解决了(同样的前景色作为蒙版)

我猜,这让我损失了 -2 分:-|

现在它可以按预期工作了。

from Tkinter import *
import Tkinter
from PIL import Image, ImageTk

root = Tkinter.Tk()  # A root window for displaying objects
# open image
imageHead = Image.open('head.png')
imageHand = Image.open('hand.png')

imageHead.paste(imageHand, (20, 40), imageHand)
# Convert the Image object into a TkPhoto object
tkimage = ImageTk.PhotoImage(imageHead)

panel1 = Label(root, image=tkimage)
panel1.grid(row=0, column=2, sticky=E)
root.mainloop()  # Start the GUI

【讨论】:

    【解决方案2】:

    大家好,我知道我迟到了 6 年,但我可以帮你解决这个问题

    from PIL import Image
    
    import numpy as np
    
    # Create Image
    img = Image.open("forground.png")
    
    background = Image.open("background.png")
    
    background.paste(img, (0, 0), img)
    background.save('NewImg.png',"PNG")
    
    NewImg = Image.open('NewImg.png')
    
    # Use Image
    tkimage = ImageTk.PhotoImage(NewImg)
    
    panel1 = Label(root, image=tkimage)
    panel1.grid(row=0, column=2, sticky=E)
    root.mainloop()  # Start the GUI
    

    所以您所要做的就是在处理文件时使用 NewImg。 此代码从两个图像中创建一个图像,然后在程序中使用该图像。

    【讨论】: