我编写了一个使用Pillow和images2gif创建gif动画的程序。不久前,我把一切都运行得很完美,但我决定从64位切换到32位python,因为我听说有更多的库支持。重新安装python后,我的程序无法正确生成gif,我怀疑这是因为更改了已安装的软件包版本。我尝试过使用不同版本的images2gif,numpy和Pillow,但这还没有解决问题。
演示问题的简单脚本是:
from PIL import Image
from images2gif import writeGif
frames = []
frames.append(Image.open('program_data/background_images/Half Court - MF AD.png'))
frames.append(Image.open('program_data/background_images/Half Court - AD.png'))
writeGif('test_output_image.gif', frames, subRectangles=True, duration=0.5, dispose=1)
我最初的问题引发了错误:
Traceback (most recent call last):
File "C:/Users/Michael/Documents/Python_Scripts/GUI_animator/why_broken.py", line 7, in <module>
writeGif('test_output_image.gif', frames, subRectangles=True, duration=0.5, dispose=1)
File "C:\Python27\lib\site-packages\images2gif\images2gif.py", line 571, in writeGif
images, xy, images_info = gifWriter.handleSubRectangles(images, subRectangles)
File "C:\Python27\lib\site-packages\images2gif\images2gif.py", line 295, in handleSubRectangles
images, xy = self.getSubRectangles(images)
File "C:\Python27\lib\site-packages\images2gif\images2gif.py", line 347, in getSubRectangles
im2 = im[y0:y1,x0:x1]
TypeError: only integer scalar arrays can be converted to a scalar index
我认为这是由于numpy不再支持1d长度1数组的索引,通过更改images2gif.py中的第340和341行来解决:
x0, x1 = X[0], X[-1]+1
y0, y1 = Y[0], Y[-1]+1
为:
x0, x1 = int(X[0]), int(X[-1]+1)
y0, y1 = int(Y[0]), int(Y[-1]+1)
但是我现在得到错误:
Traceback (most recent call last):
File "C:/Users/Michael/Documents/Python_Scripts/GUI_animator/why_broken.py", line 7, in <module>
writeGif('test_output_image.gif', frames, subRectangles=True, duration=0.5, dispose=1)
File "C:\Python27\lib\site-packages\images2gif\images2gif.py", line 593, in writeGif
gifWriter.writeGifToFile(fp, images, duration, loops, xy, dispose)
File "C:\Python27\lib\site-packages\images2gif\images2gif.py", line 449, in writeGifToFile
fp.write(globalPalette)
TypeError: argument 1 must be string or buffer, not None
我已尝试按照这些说明(github.com/almarklein/visvis/issues/81和stackoverflow.com/questions/19149643/error-in-images2gif-py-with-globalpalette)更改images2gif.py的第426行从:
palettes.append( getheader(im)[1] )
以下任何一个:
palettes.append( getheader(im)[0][-1] )
palettes.append( im.palette.getdata()[1] )
并且还尝试(复制this code)添加到上面一行:
if not palette[-1]:
palette[-1] = im.palette.tobytes()
所有这三个改动都允许程序创建gif文件,但这是一个乱码(请参阅谷歌驱动器链接)。
我的版本是:
Python 2.7.13(windows 32bit)
枕头4.0.0
Numpy 1.12.0 + mkl
images2gif 1.0.1
google drive上提供了我的相关文件和上述软件包的副本(来自我的c:/ Python27 / Lib / site-packages目录)。
如上所述,上面的第一个代码块是一个演示问题的简单示例。一旦我得到了修复,我将实际运行animator.py并传递demo_config_file.py作为输入,在更改我的安装之前工作正常。
为什么调色板没有正确加载的任何想法,或者我的问题是否完全不同?