images2gif/ Подушка создает искаженное изображение

Я написал программу, которая создает GIF-анимацию с использованием Pillow и images2gif. Некоторое время назад у меня все работало отлично, но я решил переключиться с 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 для индексов, что решается изменением строк 340 и 341 в images2gif.py:

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 и stackru.com/questions/19149643/error-in-images2gif-py-with-globalpalette), чтобы изменить строку 426 images2gif.py из:

palettes.append( getheader(im)[1] ) 

к одному из:

palettes.append( getheader(im)[0][-1] ) 
palettes.append( im.palette.getdata()[1] )

и также попытался (копируя этот код) добавить под строкой выше:

if not palette[-1]:
    palette[-1] = im.palette.tobytes()

Все эти три изменения позволяют программе создавать gif-файл, но это искаженный беспорядок (см. Ссылку на диске Google).

Мои версии:
Python 2.7.13 (windows 32bit)
Подушка 4.0.0
Numpy 1.12.0 + мкл
images2gif 1.0.1

Мои соответствующие файлы и копии вышеуказанных пакетов (из моего каталога c:/Python27/Lib/site-packages) доступны на диске Google.

Как уже упоминалось, первый блок кода выше является простым примером для демонстрации проблемы. Как только я это исправлю, я на самом деле буду запускать animator.py и передавать в качестве входных данных demo_config_file.py, который отлично работал до изменения моей установки.

Любые идеи, почему палитра не загружается правильно, или моя проблема что-то совершенно другое?

0 ответов

Другие вопросы по тегам