从GIF中提取帧的问题更多

时间:2014-02-24 19:09:43

标签: python gif

按照上一个问题(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时:

GIF

它产生这两个帧:

Frame 1 Frame 2

第一个是好的,第二个没有那么多。

现在怎么办?

2 个答案:

答案 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

frame-0.png

frame-1

frame-1.png