<blockquote>
<p>Newsgroups: comp.lang.python</p>
<p>From: "Fredrik Lundh" </p>
<p>Date: Mon, 1 May 2006</p>
<p>Daniel Nogradi wrote:</p>
<p>'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.'</p>
</blockquote>
<p>它们仍然附带着1.1.5(和1.1.6),而且应该可以工作。</p>
<p>如果缺少的只是脚本目录中的一些文件,则可以
他们在这里:</p>
<p><a href="http://svn.effbot.org/public/pil/Scripts/" rel="nofollow noreferrer">http://svn.effbot.org/public/pil/Scripts/</a></p>
<hr/>
<p>player.py从命令行运行</p>
<p>看看这个是否适合你:</p>
<pre><code>from Tkinter import *
from PIL import Image, ImageTk
class MyLabel(Label):
def __init__(self, master, filename):
im = Image.open(filename)
seq = []
try:
while 1:
seq.append(im.copy())
im.seek(len(seq)) # skip to next frame
except EOFError:
pass # we're done
try:
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)
def play(self):
self.config(image=self.frames[self.idx])
self.idx += 1
if 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()
def stop_it():
anim.after_cancel(anim.cancel)
Button(root, text='stop', command=stop_it).pack()
root.mainloop()
</code></pre>