按照上一个问题(Gifs opened with python have broken frames),我现在有了有时可行的代码。
例如,此代码
from PIL import Image
img = Image.open('pigs.gif')
counter = 0
collection = []
current = img.convert('RGBA')
while True:
try:
current.save('original%d.png' % counter, 'PNG')
img.seek(img.tell()+1)
current = Image.alpha_composite(current, img.convert('RGBA'))
counter += 1
except EOFError:
break
...完美适用于大多数GIF,但在其他GIF上会产生奇怪的效果。例如,当应用于这个2帧GIF时:
它产生这两个帧:
第一个是好的,第二个没有那么多。
现在怎么办?
答案 0 :(得分:1)
听起来你想这样做:
while True:
try:
current.save('original%d.gif' % counter)
img.seek(img.tell()+1)
current = img.convert('RGBA')
counter += 1
except EOFError:
break
答案 1 :(得分:1)
尝试Wand(Wand是用于Python的基于ctypes的简单ImageMagick绑定。)
from wand.image import Image
def extract_frames(gif_file):
with Image(filename=gif_file) as gif:
for i, single_img in enumerate(gif.sequence):
with Image(image=single_img) as frame:
frame.format = 'PNG'
frame.save(filename='frame-%d.png' % i)
extract_frames('test.gif')
frame-0.png
frame-1.png