PNG图像,支持缩放和更改python中的透明度

时间:2018-04-21 02:27:54

标签: python-3.x tkinter python-imaging-library transparency resizable

我想在画布上显示PNG图片。 在此之前,我需要调整它并改变透明度。

我发现我可以加载图片并使用PhotoImage更改Alpha通道,如下所示:

image1 = PIL.Image.open('aqua.png')
image1.putalpha(128)
gif1 = ImageTk.PhotoImage(image1)

我也可以加载PhotoImage并像这样调整大小:

gif1 = PhotoImage(file = 'aqua.png')
gif1 = gif1.subsample(5)

但是我无法在同一PhotoImage

上执行这两件事

我了解PhotoImageImageTk.PhotoImage在我的代码中是不同的类。

>> print (ImageTk.PhotoImage)
<class 'PIL.ImageTk.PhotoImage'>
>> print (PhotoImage)
<class 'tkinter.PhotoImage'>

我试图在两个类中找到我需要的功能但没有成功。

也许我需要执行subsample而不是将tkinter.PhotoImage转换为PIL.ImageTk.PhotoImage,然后执行putalpha,但这听起来很奇怪。

请参考我在Python中使用png烹饪的正确方向。

这是我的所有代码:

from tkinter import *
import PIL
from PIL import Image, ImageTk

canvas = Canvas(width = 200, height = 200)
canvas.pack(expand = YES, fill = BOTH)

image1 = PIL.Image.open('aqua.png')
image1.putalpha(128)
gif1 = ImageTk.PhotoImage(image1)

# gif1 = PhotoImage(file = 'aqua.png')
# next line will not work in my case
gif1 = gif1.subsample(5)

canvas.create_image(0, 0, image = gif1, anchor = NW)
mainloop()

1 个答案:

答案 0 :(得分:3)

您可以使用resize课程中包含的Image方法。这是修改后的代码:

from tkinter import *
from PIL import Image, ImageTk

canvas = Canvas(width = 200, height = 200)
canvas.pack(expand = YES, fill = BOTH)

image1 = Image.open('aqua.png')
image1.putalpha(128)
image1 = image1.resize((image1.width//5,image1.height//5))
gif1 = ImageTk.PhotoImage(image1)

canvas.create_image(0, 0, image = gif1, anchor = NW)
mainloop()