images2gif引发“无法获取调色板”错误

时间:2015-09-05 18:34:07

标签: python image python-3.x pillow

我正在编写一个简单的脚本来下载一系列雷达图像,为它们添加叠加层,然后将它们变成动画gif。 我正在使用来自visvis包的Pillow和images2gif。 我之前问了一个关于堆叠透明gif文件的问题。 我设法让这个工作,但images2gif正在抛出一个错误。 以下是我项目中的相关代码:

from PIL import Image
from visvis.vvmovie.images2gif import writeGif as gif

background = Image.open("%IMAGEDIR%\Background.png")
overlay = Image.open("%IMAGEDIR%\Overlay.png")
frames = []
for i in range (10, 0, -1):
    imagenum = ("%02d" % i)
    radar = Image.open("%IMAGEDIR%\" + imagenum + ".gif")
    radar = radar.convert("RGBA")
    background.paste(radar, (0,0), radar)
    background.paste(overlay, (0,0), overlay)
    background.convert("RGB").convert("P", palette = Image.ADAPTIVE)
    frames.append(background)
print ("Writing image!")
gif("%IMAGEDIR%\animation.gif", frames)
print ("Done!")

但是,这会从images2gif:

引发错误
Traceback (most recent call last):
  File "%IMAGEDIR%\images.py", line 62, in <module>
    gif("%IMAGEDIR%\animation.gif", frames)
  File "C:\Python34\lib\site-packages\visvis\vvmovie\images2gif.py", line 578, in writeGif
gifWriter.writeGifToFile(fp, images, duration, loops, xy, dispose)
  File "C:\Python34\lib\site-packages\visvis\vvmovie\images2gif.py", line 418, in writeGifToFile
   raise RuntimeError('Cannot get palette. '
RuntimeError: Cannot get palette. Maybe you should try imageio instead.

转到images2gif中的相关行,我发现:

# Obtain palette for all images and count each occurance
palettes, occur = [], []
for im in images:
    palette = getheader(im)[1]
    if not palette:
        palette = PIL.ImagePalette.ImageColor
        if isinstance(palette, type(os)):
            # Older or newer? version of Pil(low)
            data = PIL.ImagePalette.ImagePalette().getdata()
            palette = data[0].encode('utf-8') + data[1]
            # Arg this does not work. Go use imageio
            raise RuntimeError('Cannot get palette. '
                               'Maybe you should try imageio instead.')
    palettes.append(palette)
for palette in palettes:
    occur.append(palettes.count(palette))

我从未使用过imageio,而且我已经在使用可以与images2gif一起使用的PIL了。理想情况下,我不想将图像保存到磁盘 - 它们是小文件,但我想让它工作,但我可以。

非常感谢您的帮助!

注意:我在Windows 10上使用Python 3.4,使用numpy 1.9.2和visvis 1.9.2来测试它,但是这个脚本将用于PythonAnywere。

1 个答案:

答案 0 :(得分:4)

尝试此版本,与我合作(使用枕头2.9):https://github.com/rec/echomesh/blob/master/code/python/external/images2gif.py