1. 程式人生 > >Python實現動態圖的解析、合成與倒放

Python實現動態圖的解析、合成與倒放

動態圖現在已經融入了我們的日常網路生活,大大豐富了我們的表達方式和交流趣味性。常常是一言不合就放動圖,我這裡就不舉例子了。咱們直接開始本文的內容。

用到的庫和模組

今天用看看如何用Python寫個程式,進行動態圖的解析、合成與倒放。這裡我們用到的庫有且只有PIL。而且只用到了PIL的兩個模組ImageImageSequence。顧名思義,就是影象模組和影象序列模組。動態圖正好可以看作是影象序列。

原理

所謂動態圖的解析,就是把GIF格式的圖片轉化為圖片流的過程,而動態圖的合成就是把圖片流重新合成GIF圖片的過程。而所謂動態圖倒放,就是把圖片流反序之後再合成GIF了。

程式碼

原理上沒啥難以理解的,我們還是直接看程式碼。

from PIL import Image, ImageSequence 

# 讀取GIF
im = Image.open("5.gif")
# GIF圖片流的迭代器
iter = ImageSequence.Iterator(im)

index = 1
# 遍歷圖片流的每一幀
for frame in iter:
    print("image %d: mode %s, size %s" % (index, frame.mode, frame.size))
    frame.save("./imgs/frame%d.png" % index)
    index += 1
# frame0 = frames[0] # frame0.show() # 把GIF拆分為圖片流 imgs = [frame.copy() for frame in ImageSequence.Iterator(im)] # 把圖片流重新成成GIF動圖 imgs[0].save('out.gif', save_all=True, append_images=imgs[1:]) # 圖片流反序 imgs.reverse() # 將反序後的所有幀影象儲存下來 imgs[0].save('./reverse_out.gif', save_all=True, append_images=imgs[1:])

加上註釋之後的程式碼完全沒啥可說的有木有?

其實還還是有些地方可說的,比如圖片為啥儲存為PNG格式的,JPG行不行?比如第六行與第19行末尾的程式碼是否重複,第19行末尾能不能用iter代替?

這些問題知道的就算了,不知道的希望能夠自己跑一跑程式碼,查一查資料,補充下這方面的小知識。

效果

這裡寫圖片描述
倒放
這裡寫圖片描述
圖片流
這裡寫圖片描述

公眾號CVPy,分享OpenCV和Python的實戰內容。。歡迎關注。

這裡寫圖片描述