11

The instructions are simple enough in the Wand docs for reading a sequenced image (e.g. animated gif, icon file, etc.):

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

...but I'm not sure how to create one.

In Ruby this is easy using RMagick, since you have ImageLists. (see my gist for an example.)

I tried creating an Image (as the "container") and instantiating each SingleImage with an image path, but I'm pretty sure that's wrong, especially since the constructor documentation for SingleImage doesn't look for use by the end-user.

I also tried creating a wand.sequence.Sequence and going from that angle, but hit a dead-end as well. I feel very lost.

wwl
  • 2,025
  • 2
  • 30
  • 51
Dominick
  • 437
  • 5
  • 16
  • my question looks to be a dupe of http://stackoverflow.com/questions/17394869/writing-animated-gif-using-wand-and-imagemagick?rq=1 – Dominick Oct 09 '16 at 18:53
  • for those curious, here's what I ended up with (it works as i want it to), thanks to @emcconville's accepted answer below: https://gist.github.com/dguzzo/cecc2ef8b8b520af3dc40e209eadc183 – Dominick Oct 19 '16 at 21:09

1 Answers1

12

The best examples are located in the unit-tests shipped with the code. wand/tests/sequence_test.py for example.

For creating an animated gif with wand, remember to load the image into the sequence, and then set the additional delay/optimize handling after all frames are loaded.

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

emcconville
  • 23,800
  • 4
  • 50
  • 66