带有GlobalPalette的images2gif.py出错

时间:2013-10-03 02:02:23

标签: python-imaging-library

尝试将jpgs序列转换为gif时出错。似乎无法弄清楚如何添加调色板,或者这是否是实际问题。能够使用images2gif.py main中的numpy数组加载GIF。

import PIL
from PIL import Image
import StringIO
import images2gif

images = []
for frame in animation1.frames:
    img_data = s3manager.get_file_as_string(frame.s3_filename)
    image = Image.open(StringIO.StringIO(img_data))
    images.append(image)

images2gif.writeGif('lala3.gif', images, duration=0.5, dither=0)  

有了这个,我收到以下错误:

"images2gif.py", line 436, in writeGifToFile
  fp.write(globalPalette)
TypeError: must be string or buffer, not None

不确定如何为这些jpgs指定调色板。文件不清楚,甚至不确定这是不是问题。帮助

4 个答案:

答案 0 :(得分:27)

在images2gif.py中更改第200行:

for im in images:
    palettes.append( getheader(im)[1] )

for im in images:
    palettes.append(im.palette.getdata()[1])

答案 1 :(得分:3)

images2gif作者似乎愿意放弃对枕头的支持。见这个主题:

https://code.google.com/p/visvis/issues/detail?id=81

从这个帖子中,我发现了该脚本的固定版本,它适用于我(使用枕头2.4)。它可以在这里: https://github.com/rec/echomesh/blob/master/code/python/external/images2gif.py并使用任何类型的PNG(也是P模式)生成高质量的gif

答案 2 :(得分:1)

images2gif.py使用PIL.GifImagePlugin中的getheader函数来获取调色板。

出于某种原因,它不适用于您阅读的图像。如果源图像不是“P”模式,则脚本可能无法正常工作。

答案 3 :(得分:0)

我在Pillow之后安装了PIL,它开始工作了。看起来像某些原因需要两个库。以下是重新安装两者的方法:

pip uninstall PIL
pip uninstall Pillow
pip install Pillow
pip install PIL