gpt4 book ai didi

python - 使用 Python TKinter/imageTK 在屏幕上的图像之间淡入淡出

转载 作者:行者123 更新时间:2023-11-28 17:48:05 28 4
gpt4 key购买 nike

我是一个 python 新手,一直在制作一个有点奇怪的幻灯片脚本,它循环显示图像,还从另一个文件中获取变量以“解决”图像。

我确定我的代码是悲剧性的。但它确实有效(见下文)!

我的问题是 - 我如何让它在图像之间淡出而不是生涩暂时变白然后到它当前正在做的下一张图像?是否有我应该查看的转换模块?

from Tkinter import *
import Image, ImageTk, random, string

class MyApp(Tk):

def __init__(self):
Tk.__init__(self)
fr = Frame(self)
fr.pack()
self.canvas = Canvas(fr, height = 400, width = 600)
self.canvas.pack()

self.old_label_image = None
self.position = 0
self.command = 0
self.oldcommand = 0

self.slideshow()
self.debug()

def debug(self):
self.QUIT = Button(self)
self.QUIT["text"] = "QUIT!" + str(self.command)
self.QUIT["fg"] = "red"
self.QUIT["command"] = self.quit

self.QUIT.pack({"side": "right"})

def slideshow (self):

if self.command != self.oldcommand:
self.after_cancel(self.huh)
# run through random between 2-5 changes
# then settle on command for 30 seconds
self.title("Title: PAUSE")
self.oldcommand = self.command
self.slideshow()
else:
file = str(self.position) + '.jpg'
image1 = Image.open(file)
self.tkpi = ImageTk.PhotoImage(image1)
label_image = Label(self, image=self.tkpi)
label_image.place(x=0,y=0,width=image1.size[0],height=image1.size[1])
self.title("Title: " + file)

if self.old_label_image is not None:
self.old_label_image.destroy()
self.old_label_image = label_image

# make this random instead of pregressional
if self.position is not 1:
self.position = self.position + 1
else:
self.position = 0

commandfile = open('command.txt', 'r')
self.command = string.atoi(commandfile.readline())
commandfile.close()

int = random.randint(2000, 5000)
self.huh = self.after(int, self.slideshow)
#self.after_cancel(huh) - works ! so maybe can do from below Fn?

if __name__ == "__main__":
root = MyApp()
root.mainloop()

最佳答案

这可以使用 blend 函数来实现。

 Image.blend(image1, image2, alpha) ⇒ image

通过使用常量 alpha 在给定图像之间进行插值来创建新图像。两个图像必须具有相同的大小和模式。

out = image1 * (1.0 - alpha) + image2 * alpha

如果 alpha 为 0.0,则返回第一张图像的副本。如果 alpha 为 1.0,则返回第二张图像的副本。对 alpha 值没有限制。如有必要,将裁剪结果以适合允许的输出范围。

所以你可以有这样的东西:

alpha = 0
while 1.0 > alpha:
image.blend(img1,img2,alpha)
alpha = alpha + 0.01
label_image.update()

这里有一个例子,还没有时间测试这个,但你明白了-

from PIL import image
import time
white = image.open("white_248x.jpg")
black = image.open("black_248x.jpg")
new_img = image.open("white_248x.jpg")
root = Tk()
image_label = label(root, image=new_img)
image_label.pack()
alpha = 0
while 1.0 > alpha:
new_img = image.blend(white,black,alpha)
alpha = alpha + 0.01
time.sleep(0.1)
image_label.update()
root.mainloop()

关于python - 使用 Python TKinter/imageTK 在屏幕上的图像之间淡入淡出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214350/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com