私信  •  关注

Apostolos

Apostolos 最近创建的主题
Apostolos 最近回复了
7 年前
回复了 Apostolos 创建的主题 » 在Python中将png文件转换为动画gif

真是难以置信。。。所有人都提出了一些特殊的包来播放动画GIF,目前,它可以与Tkinter和经典的PIL模块!

这是我自己的GIF动画方法(我刚才创建的)。非常简单:

from Tkinter import * 
from PIL import Image, ImageTk
from time import sleep

def stop(event):
  global play
  play = False
  exit() 

root = Tk()
root.bind("<Key>", stop) # Press any key to stop
GIFfile = {path_to_your_GIF_file}    
im = Image.open(GIFfile); img = ImageTk.PhotoImage(im)
delay = float(im.info['duration'])/1000; # Delay used in the GIF file 
lbl = Label(image=img); lbl.pack() # Create a label where to display images
play = True; frame = 0
while play:
  sleep(delay);
  frame += 1
  try:
    im.seek(frame); img = ImageTk.PhotoImage(im)
    lbl.config(image=img); root.update() # Show the new frame/image
  except EOFError:
    frame = 0 # Restart

root.mainloop()

注意:我不确定连续的帧是从内存还是从文件(磁盘)中读取的。在第二种情况下,如果它们都同时读取并保存到一个数组(列表)中,则效率会更高。(我不太想知道!:)

7 年前
回复了 Apostolos 创建的主题 » 在Python中将png文件转换为动画gif

我碰到了皮尔的 图像序列 之后() 这次的方法,比 时间。睡眠() .

from Tkinter import * 
from PIL import Image, ImageTk, ImageSequence

def stop(event):
  global play
  play = False
  exit() 

root = Tk()
root.bind("<Key>", stop) # Press any key to stop
GIFfile = {path_to_your_GIF_file}
im = Image.open(GIFfile); img = ImageTk.PhotoImage(im)
delay = im.info['duration'] # Delay used in the GIF file 
lbl = Label(image=img); lbl.pack() # Create a label where to display images
play = True;
while play:
  for frame in ImageSequence.Iterator(im):
    if not play: break 
    root.after(delay);
    img = ImageTk.PhotoImage(frame)
    lbl.config(image=img); root.update() # Show the new frame/image

root.mainloop()