Tkinter,将前景图像以透明度叠加在背景图像上

7 投票
2 回答
17055 浏览
提问于 2025-04-18 07:38

我有两张图片,都是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窗口被显示出来。

2 个回答

1

大家好,我知道我来晚了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。这个代码会把两张图片合成一张,然后在程序中使用这张合成的图片。

4

谢谢你,Bryan。

明白了,除了标签的问题,透明度的问题也是从另一个问题解决的,具体可以参考这里(使用相同的前景图像作为遮罩)。

我想,这就是我失去-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

撰写回答