Python Tkinter Display Animated Gif Using Pil
Is there any way to display an animated GIF in Tkinter using Python Image Library? I thought the ImageSequence module would be the way to do it, but I don't know how to use it and
Solution 1:
Newsgroups: comp.lang.python
From: "Fredrik Lundh"
Date: Mon, 1 May 2006
Daniel Nogradi wrote:
'The source distribution of the 1.1.4 version comes with a Scripts directory where you can find player.py, gifmaker.py and explode.py which all deal with animated gif.'
they're still shipped with 1.1.5 (and 1.1.6), and they should work.
if all you're missing is a few files from the script directory, you can get them here:
http://svn.effbot.org/public/pil/Scripts/
player.py is run from the command line
see if this one works for you:
from Tkinter import *
from PIL import Image, ImageTk
classMyLabel(Label):
def__init__(self, master, filename):
im = Image.open(filename)
seq = []
try:
while1:
seq.append(im.copy())
im.seek(len(seq)) # skip to next frameexcept EOFError:
pass# we're donetry:
self.delay = im.info['duration']
except KeyError:
self.delay = 100
first = seq[0].convert('RGBA')
self.frames = [ImageTk.PhotoImage(first)]
Label.__init__(self, master, image=self.frames[0])
temp = seq[0]
for image in seq[1:]:
temp.paste(image)
frame = temp.convert('RGBA')
self.frames.append(ImageTk.PhotoImage(frame))
self.idx = 0
self.cancel = self.after(self.delay, self.play)
defplay(self):
self.config(image=self.frames[self.idx])
self.idx += 1if self.idx == len(self.frames):
self.idx = 0
self.cancel = self.after(self.delay, self.play)
root = Tk()
anim = MyLabel(root, 'animated.gif')
anim.pack()
defstop_it():
anim.after_cancel(anim.cancel)
Button(root, text='stop', command=stop_it).pack()
root.mainloop()
Solution 2:
Simple PIL version:
canvas = Image.new("RGB",(Width,Height),"white")
gif = Image.open('text.gif', 'r')
frames = []
try:
while1:
frames.append(gif.copy())
gif.seek(len(frames))
except EOFError:
passfor frame in frames:
canvas.paste(frame)
canvas.show()
Post a Comment for "Python Tkinter Display Animated Gif Using Pil"