Python實現(xiàn)動態(tài)圖解析、合成與倒放
動態(tài)圖現(xiàn)在已經(jīng)融入了我們的日常網(wǎng)絡(luò)生活,大大豐富了我們的表達(dá)方式和交流趣味性。常常是一言不合就扔動圖,我這里就不舉例子了,例子太多,平時大家也都接觸過。咱們直接開始本文的內(nèi)容。
用到的庫和模塊
今天用看看如何用Python寫個程序,進(jìn)行動態(tài)圖的解析、合成與倒放。這里我們用到的庫有且只有PIL。而且只用到了PIL的兩個模塊Image和ImageSequence。顧名思義,就是圖像模塊和圖像序列模塊。動態(tài)圖正好可以看作是圖像序列。
簡單的原理和代碼
所謂動態(tài)圖的解析,就是把GIF格式的圖片轉(zhuǎn)化為圖片流的過程,而動態(tài)圖的合成就是把圖片流重新合成GIF圖片的過程。而所謂動態(tài)圖倒放,就是把圖片流反序之后再合成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:])
效果
以下是動圖原圖、效果圖。

倒放的動態(tài)圖

動態(tài)圖解析得到的圖片流:

補充說明
加上注釋之后的代碼完全沒啥可說的有木有?
其實還還是有些地方可說的,比如圖片為啥保存為PNG格式的,JPG行不行?比如第六行與第19行末尾的代碼是否重復(fù),第19行末尾能不能用iter代替?
這些問題知道的就算了,不知道的希望能夠自己跑一跑代碼,查一查資料,補充下這方面的小知識。
除此之外,還有哪些補充知識的方法呢?當(dāng)然是看書啦~
相關(guān)文章
python elasticsearch從創(chuàng)建索引到寫入數(shù)據(jù)的全過程
這篇文章主要介紹了python elasticsearch從創(chuàng)建索引到寫入數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08
使用Python的networkx繪制精美網(wǎng)絡(luò)圖教程
今天小編就為大家分享一篇使用Python的networkx繪制精美網(wǎng)絡(luò)圖教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Pytorch實現(xiàn)圖像識別之?dāng)?shù)字識別(附詳細(xì)注釋)
這篇文章主要介紹了Pytorch實現(xiàn)圖像識別之?dāng)?shù)字識別(附詳細(xì)注釋),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05

