2016-10-09 10 views
5

Инструкции достаточно проста в Wand docs для чтения упорядоченных изображений (например, анимированного GIF, значок файла и т.д.):Как создать анимированный gif в Python с помощью Wand?

>>> from wand.image import Image 
>>> with Image(filename='sequence-animation.gif') as image: 
...  len(image.sequence) 

... но я не знаю, как создать один.

В Ruby это легко использовать RMagick, так как у вас есть ImageList s. (См my gist для примера.)

Я попытался создание Image (как «контейнер») и инстанцирования каждого SingleImage с путем изображения, но я уверен, что это неправильно, тем более, что в документации конструктора для SingleImage Безразлично 'искать пользователя конечным пользователем.

Я также попытался создать wand.sequence.Sequence и перейти оттуда, но мяч пролетел мимо тупика. Я чувствую себя очень потерянным.

+0

мой вопрос выглядит как контратип http://stackoverflow.com/questions/17394869/writing-animated-gif-using-wand-and-imagemagick?rq=1 – Dominick

+0

для Любопытно, вот что я закончил (это работает так, как я этого хочу), благодаря принятому ниже @ emcconville ответу: https://gist.github.com/dguzzo/cecc2ef8b8b520af3dc40e209eadc183 – Dominick

ответ

4

Лучшие примеры находятся в модульных тестах, поставляемых с кодом. wand/tests/sequence_test.py например.

Для создания анимированного gif с помощью палочки не забудьте загрузить изображение в последовательность, а затем установите дополнительную обработку задержки/оптимизации после загрузки всех кадров.

from wand.image import Image 

with Image() as wand: 
    # Add new frames into sequance 
    with Image(filename='1.png') as one: 
     wand.sequence.append(one) 
    with Image(filename='2.png') as two: 
     wand.sequence.append(two) 
    with Image(filename='3.png') as three: 
     wand.sequence.append(three) 
    # Create progressive delay for each frame 
    for cursor in range(3): 
     with wand.sequence[cursor] as frame: 
      frame.delay = 10 * (cursor + 1) 
    # Set layer type 
    wand.type = 'optimize' 
    wand.save(filename='animated.gif') 

output animated.gif

+0

круто, спасибо @emcconville; Я должен был посмотреть на те модульные тесты! – Dominick