Ошибка в images2gif.py с помощью GlobalPalette

Получение ошибки при попытке конвертировать последовательность jpgs в gif. Не похоже, чтобы понять, как добавить палитру, или если это актуальная проблема. Была возможность загружать gifs с использованием массивов numpy в images2gif.py main.

import PIL
from PIL import Image
import StringIO
import images2gif

images = []
for frame in animation1.frames:
    img_data = s3manager.get_file_as_string(frame.s3_filename)
    image = Image.open(StringIO.StringIO(img_data))
    images.append(image)

images2gif.writeGif('lala3.gif', images, duration=0.5, dither=0)  

С этим я получаю следующую ошибку:

"images2gif.py", line 436, in writeGifToFile
  fp.write(globalPalette)
TypeError: must be string or buffer, not None

Не знаете, как указать палитру для этих jpg. документация неясна для меня, и даже не уверен, что это проблема. помочь?

Ответы

Ответ 1

В строке change2gif.py с картинкой:

for im in images:
    palettes.append( getheader(im)[1] )

к

for im in images:
    palettes.append(im.palette.getdata()[1])

Ответ 2

images2gif автор, похоже, готов отказаться от поддержки подушки. Смотрите эту тему:

https://code.google.com/p/visvis/issues/detail?id=81

Из этой темы тоже я нашел исправленную версию этого script, которая работает со мной (с подушкой 2.4). Он доступен здесь: https://github.com/rec/echomesh/blob/master/code/python/external/images2gif.py и создает хорошее качество gif с любым PNG (режим P тоже)

Ответ 3

images2gif.py использует функцию getheader из PIL.GifImagePlugin для получения палитр.

По какой-то причине он не работает с изображением, которое вы читаете. Возможно, script не работает, если исходные изображения не являются режимами "P".

Ответ 4

Я установил PIL после Pillow, и он начал работать. Похоже, что обе библиотеки нужны по какой-то причине. Вот как переустановить оба:

pip uninstall PIL
pip uninstall Pillow
pip install Pillow
pip install PIL