images2gif / Pillow创建乱码图像

时间:2017-02-07 18:32:51

标签: python python-2.7 gif pillow palette

我编写了一个使用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作为输入,在更改我的安装之前工作正常。

为什么调色板没有正确加载的任何想法,或者我的问题是否完全不同?

0 个答案:

没有答案