Изменение размера GIF-анимации, pil/imagemagick, python

Я хочу изменить размер анимационного изображения GIF, используя python и PIL или PythonMagick. Я не могу найти решение. Метод PIL и thumbnail работает для jpg и png, но не для gif. У ImageMagick есть команда mogrify/convert -resize '1280x1024>', но я не могу найти документацию и не знаю, как это сделать с помощью pythonmagick.

Кто-нибудь знает решение?

В худшем случае я использую os/subprocess и конвертирую ;-S

Спасибо.


person eshlox    schedule 03.04.2012    source источник
comment
Я бы порекомендовал вам сделать именно это - использовать подпроцесс и преобразовать. Pythonmagic страдает от отсутствия надлежащего обслуживания, а PIL просто поддерживает чтение анимированных GIF-файлов и ничего больше. Оставьте вопрос открытым - возможно, появится кто-то с psnipped для изменения размера с помощью Pythonmagic.   -  person jsbueno    schedule 03.04.2012


Ответы (2)


Вы можете использовать PIL и images2gif, короткий модуль на основе PIL, связанный с этим страница блога и доступна здесь. Код, используемый для обработки этого rose.gif, приведен ниже. Я установил для свойства images2gif.readGif 'read as numpy array' значение false, чтобы получить список изображений PIL, чтобы я мог использовать функцию PIL thumbnail.

Оригинал: roseОбработано: маленькая роза

import Image
import images2gif

frames = images2gif.readGif("rose.gif",False)
for frame in frames:
    frame.thumbnail((100,100), Image.ANTIALIAS)

images2gif.writeGif('rose99.gif', frames)

Я не уверен, как сохранить прозрачность, мои попытки сделать это не увенчались успехом (пока).

person fraxel    schedule 05.04.2012
comment
Согласно velocityreviews.com/forums/, вы должны сами обрабатывать прозрачность, с прозрачностью = im.info[transparency]; ...; out.save(out.gif, прозрачность=прозрачность) - person Talia; 22.09.2012

Какой-то удивительный человек сделал обновленную версию images2gif.py с учетом прозрачности:

https://bitbucket.org/bench/images2gif.py/overview

Артефакты еще есть, но это намного лучше оригинала!

person Coconut    schedule 25.06.2013
comment
Ошибка с первой попытки - список палитр выглядит как [None, None.. None] и пытается записать это в новый файл. К сожалению, это то, что вы ожидаете, когда часть кода не поставляется с тестами. Оригинал, по крайней мере, дает осмысленное сообщение: RuntimeError: Cannot get palette. Maybe you should try imageio instead. - person Mihnea Simian; 08.07.2015