编辑:我最初搜索信息的问题是我没有区分 gif 和“动画 gif”。因此,有很多关于 SO 的资源来处理这个问题。资源: 链接 3
显然 PIL 本身在处理 gif 动画方面的能力很差。
我正在尝试将 gif 帧转换为 jpg。对于某些 GIF(主要是黑白),效果很好,但对于其他 GIF(主要是彩色)则不然。我已经查看了一些关于 SO 的帖子,并尝试了它们,但无济于事。特别是我尝试了:Link1,Link2。
性能是一个温和的考虑因素,但现在我只想要一个可行的解决方案。一个一致的模式是 gif 的第一张图像总是完美的。有趣的是,我什至试用了Zamzar,它也产生了相同的噪声数据。我正在做一些研究,似乎这可能是 LZW 压缩算法的一个问题,尽管在 SO 上,我看到一些帖子建议 PIL 负责 LZW 解压缩。另一方面,我听说 LZW 减压是有利的。
请注意,我也尝试过转换为 PNG,但也没有成功。白点是分层在图像上还是什么?
这是产生此错误的示例 gif 。
编辑:我刚遇到images2gif.py。如果它适用于这个问题,我会更新这篇文章。
这是我正在使用的代码:
from PIL import Image
import sys
import os
def processImage(infile):
try:
im = Image.open(infile)
except IOError:
print "Cant load", infile
sys.exit(1)
i = 0
mypalette = im.getpalette()
try:
while 1:
im.putpalette(mypalette)
new_im = Image.new("RGB", im.size)
#new_im = Image.new("RGB", im.size)
new_im.paste(im)
new_im.save('foo'+str(i)+'.png')
#if(os.stat('foo' + str(i)+'.png')):
# os.remove('foo' + str(i) + '.jpg')
i += 1
mypalette = im.getpalette()
im.seek(im.tell() + 1)
except EOFError:
pass # end of sequence