用python打开的Gifs已经破帧了

one*_*oop 2 python gif

有时,当打开GIF并将单独的帧保存到文件时,框架的形状会很糟糕.所有的GIF都不会发生这种情况,但是在许多帧中会发生这种情况.

这是原来的GIF

http://imgur.com/XMxW3m3

这是第一帧(好了)

http://imgur.com/xv43alb

这是第二帧(拧出来的)

http://imgur.com/hG4VxzL

我用两个不同的python模块尝试了同样的事情.第一个PIL

from PIL import Image

img = Image.open('pigs.gif')

counter = 0
collection = []
while True:
    try:
        img.save('original%d.gif' % counter)
        img.seek(img.tell()+1)
        counter += 1
    except EOFError:
        break
Run Code Online (Sandbox Code Playgroud)

然后魔杖:

from wand.image import Image

img = Image(filename='pigs.gif')

for i in range(len(img.sequence)):
    img2 = Image(img.sequence[i])
    img2.save(filename='original%d.gif' % i)
Run Code Online (Sandbox Code Playgroud)

两个模块也是如此.

这是怎么回事?

PS:我发现其他人有相同的症状.然而,这些解决方案(两者都围绕PIL的错误,当你执行.seek()时删除调色板)并没有解决我的问题: Python:将GIF帧转换为PNGPIL - 将GIF帧转换为JPG

Flo*_*wig 5

在gif中,帧可以仅包含在该帧中改变的像素.因此,当您导出时,在没有变化的情况下变黑.

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)
        img.seek(img.tell()+1)
        current = Image.alpha_composite(current, img.convert('RGBA'))
        counter += 1
    except EOFError:
        break
Run Code Online (Sandbox Code Playgroud)

编辑:由于颜色调色板问题而在评论中建议将输出格式更改为png.