我正在编写一个简单的脚本来下载一系列雷达图像,为它们添加叠加层,然后将它们变成动画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。
答案 0 :(得分:4)
尝试此版本,与我合作(使用枕头2.9):https://github.com/rec/echomesh/blob/master/code/python/external/images2gif.py