2016-10-09 81 views
5

的說明在Wand docs非常簡單,閱讀排序的圖像(如gif動畫,圖標文件等):如何使用魔杖在Python中創建動畫GIF?

>>> 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