2016-10-09 7 views
5

Die Anweisungen sind einfach genug, um in der Wand docs für eine sequenzierte Bildlese (zB animierte gif, Icon-Datei, etc.):Wie erstelle ich ein animiertes GIF in Python mit Wand?

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

... aber ich bin nicht sicher, wie manerstellen ein.

In Ruby ist dies einfach mit RMagick, seit Sie haben ImageList s. (Siehe my gist für ein Beispiel.)

Ich habe versucht, eine Image zu schaffen (als „Container“) und jede SingleImage mit einem Bildpfad instanziiert wird, aber ich bin mir ziemlich sicher, dass falsch ist, vor allem seit der Konstruktor Dokumentation für SingleImage Doesn suche nicht für den Endbenutzer.

Ich habe auch versucht, eine wand.sequence.Sequence erstellen und von diesem Winkel gehen, aber auch eine Sackgasse. Ich fühle mich sehr verloren.

+0

meine Frage sucht eine Betrogene von http://stackoverflow.com/questions/17394869/writing-animated-gif-using-wand-and-imagemagick?rq=1 – Dominick

+0

zu sein die Neugierigen, hier ist, was ich endete mit (es funktioniert, wie ich es will), dank @ Emcconvilles angenommene Antwort unten: https://gist.github.com/dguzzo/cecc2ef8b8b520af3dc40e209eadc183 – Dominick

Antwort

4

Die besten Beispiele finden Sie in den Komponententests, die mit dem Code ausgeliefert werden. wand/tests/sequence_test.py zum Beispiel.

Um ein animiertes GIF mit Zauberstab zu erstellen, denken Sie daran, das Bild in die Sequenz zu laden und dann die zusätzliche Verzögerung einzustellen/die Verarbeitung zu optimieren, nachdem alle Bilder geladen sind.

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

cool, danke @emcconville; Ich hätte mir diese Unit Tests ansehen sollen! – Dominick

Verwandte Themen