用Python將動(dòng)態(tài)GIF圖片倒放播放的方法
這次讓我們一個(gè)用 Python 做一個(gè)小工具:將動(dòng)態(tài) GIF 圖片倒序播放!
GIF(Graphics Interchange Format) 是一種可以用來(lái)呈現(xiàn)動(dòng)畫效果的圖片格式,原理就是保存很多幀(Frame)靜態(tài)圖像,然后連續(xù)呈現(xiàn)。很多簡(jiǎn)短的視頻也會(huì)被轉(zhuǎn)換成動(dòng)態(tài) GIF 呈現(xiàn),壓縮畫質(zhì)和去除聲音之后可以有效地減小文件大小。網(wǎng)絡(luò)上不計(jì)其數(shù)的搞笑動(dòng)圖,幾乎承載了網(wǎng)友大半的歡樂(lè),但是也有人發(fā)現(xiàn),將正常的動(dòng)畫倒序播放往往可以獲得更搞笑的效果,Reddit 上甚至有一個(gè)專門的節(jié)點(diǎn):/r/reversegif。
要做到這一點(diǎn)其實(shí)很簡(jiǎn)單,只要從原始圖片中提取中間每一幀靜態(tài)圖像,然后將順序顛倒之后重新生成一張 GIF 圖片即可。Python 中專門用于處理圖像的庫(kù)是 PIL,在 PIL 基礎(chǔ)上由 Alex Clark 等人開發(fā)了一個(gè)更友好的版本:Pillow。于是首先來(lái)安裝(或升級(jí))Pillow:
pip install --upgrade pillow -i http://pypi.douban.com/simple python -c "import PIL; print(PIL.VERSION, '\t', PIL.PILLOW_VERSION)" // 1.1.7 3.4.2 利用 Pillow 可以先讀取圖片文件并判斷該圖片是否為動(dòng)態(tài)圖片及其幀數(shù): from PIL import Imagewith Image.open('ani.gif') as im: print(im.is_animated, im.n_frames)
新版本的 Pillow 提供了更多寫入 GIF 的功能:
im.save(out, save_all=True, append_images=[im1, im2, ...])
通過(guò)設(shè)定 save_all=True 參數(shù)和 append_images 可以一次性將多幀圖像同時(shí)存入 GIF 圖片,于是我們可以這樣來(lái)生成倒序播放的圖片:
from PIL import Image, ImageSequence with Image.open('ani.gif') as im: if im.is_animated: frames = [f.copy() for f in ImageSequence.Iterator(im)] frames.reverse() # 內(nèi)置列表倒序方法 # 將倒序后的所有幀圖像保存下來(lái) frames[0].save('out.gif', save_all=True, append_images=frames[1:])
再來(lái)看一個(gè)比較明顯的效果:
為了滿足微信2M 圖片大小限制,倒序圖片經(jīng)過(guò)了采樣壓縮處理
如果想要達(dá)到鬼畜一些的效果,還可以對(duì)所有幀隨機(jī)打亂順序:
import random # frames.reverse() random.shuffle(frames)
效果如下:
以上所述是小編給大家介紹的用Python將動(dòng)態(tài)GIF圖片倒放播放的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
python 求10個(gè)數(shù)的平均數(shù)實(shí)例
今天小編就為大家分享一篇python 求10個(gè)數(shù)的平均數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12如何處理Python3.4 使用pymssql 亂碼問(wèn)題
這篇文章主要介紹了如何處理Python3.4 使用pymssql 亂碼問(wèn)題的相關(guān)資料,涉及到python pymssql相關(guān)知識(shí),對(duì)此感興趣的朋友一起學(xué)習(xí)吧2016-01-01Pandas如何對(duì)帶有Multi-column(多列名稱)的數(shù)據(jù)排序并寫入Excel中
這篇文章主要介紹了Pandas如何對(duì)帶有Multi-column(多列名稱)的數(shù)據(jù)排序并寫入Excel中問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python實(shí)現(xiàn)Word表格轉(zhuǎn)成Excel表格的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)Word表格轉(zhuǎn)成Excel表格的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04用Python實(shí)現(xiàn)定時(shí)備份Mongodb數(shù)據(jù)并上傳到FTP服務(wù)器
這篇文章主要介紹了用Python實(shí)現(xiàn)定時(shí)備份Mongodb數(shù)據(jù)并上傳到FTP服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01