用Python將GIF動(dòng)圖分解成多張靜態(tài)圖片
需求
有時(shí)候你看到一張動(dòng)態(tài)圖片,其中的一個(gè)畫面你覺得很不錯(cuò),想從中提取出來。例如以下這張由多個(gè)漂亮小姐姐組成的 GIF 動(dòng)態(tài)圖:

實(shí)現(xiàn)
GIF 動(dòng)態(tài)圖片是由多張靜態(tài)圖片組合而成,按照一定的順序和時(shí)間進(jìn)行播放?;诖?,能不能將 GIF 圖片反向分解成一張張靜態(tài)圖呢?即 GIF 圖片有多少幀,就有多少張靜態(tài)圖片。答案是肯定的! 都有現(xiàn)成的工具,有免費(fèi)的,有付費(fèi)的,有在線版的;還有些專門處理 GIF 動(dòng)態(tài)圖片的強(qiáng)大工具。
不過,作為 IT 人,不試試自己實(shí)現(xiàn)嗎?初學(xué)編程,可以練練手;高手可 DIY 可擴(kuò)展,不受限制,“無拘無束”!
那么,如何用代碼實(shí)現(xiàn)這個(gè)需求呢?有人說,“Python 除了不會(huì)生孩子,什么都會(huì)?!边@件區(qū)區(qū)小事,Python 實(shí)現(xiàn)也當(dāng)然不在話下了!這是一個(gè)圖像處理問題,Python Imaging Library 這不是 PIL 庫嗎? PIL 已經(jīng)是 Python 平臺(tái)事實(shí)上的圖像處理標(biāo)準(zhǔn)庫了。PIL 功能非常強(qiáng)大,但 API 卻非常簡單易用。不過,
由于 PIL 僅支持到 Python 2.7,加上年久失修,于是一群志愿者在 PIL 的基礎(chǔ)上創(chuàng)建了兼容的版本,名字叫 Pillow,支持最新 Python 3.x,又加入了許多新特性,因此,我們可以直接安裝使用 Pillow。
在 Pillow 中,有一個(gè)模塊是專門實(shí)現(xiàn)動(dòng)態(tài)圖片提取功能的,這就是 ImageSequence 模塊,這個(gè)模塊包含一個(gè)包裝器類,可以幫助用戶迭代圖像序列的幀。它可以遍歷動(dòng)畫、 GIF 等 。 此類接受一個(gè)圖像對象作為參數(shù)。它實(shí)現(xiàn)了一個(gè)迭代器對象,用戶可以使用該對象在圖像序列上進(jìn)行迭代。其語法為:
classPIL.ImageSequence.Iterator(im)
通過以上的了解,我們就可以小試牛刀了,如果你還沒安裝 Pillow,可以通過 pip 進(jìn)行安裝: pip install pillow 。由于時(shí)間關(guān)系,我已經(jīng)安裝好了。另外,你還可以通過 pip list 命令列出安裝了的 Python 包,看是否已經(jīng)安裝了 Pillow。

再接著,不廢話,直接上 Demo 代碼:
from PIL import Image, ImageSequence
with Image.open("girls-min.gif") as im:
index = 1
for frame in ImageSequence.Iterator(im):
frame.save(f"girl{index}.png")
index += 1
最終效果如下圖所示,再調(diào)整優(yōu)化,完善完善即可:

參考
How-To Geek : What Is a GIF, and How Do You Use Them?
到此這篇關(guān)于用Python將GIF動(dòng)圖分解成多張靜態(tài)圖片的文章就介紹到這了,更多相關(guān)Python分解圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python讀取圖片屬性信息的實(shí)現(xiàn)方法
這篇文章介紹了利用Python讀取圖片屬性信息的方法,讀取的內(nèi)容包括GPS 信息、圖片分辨率、圖片像素、設(shè)備商、拍攝設(shè)備等,有需要的朋友們可以參考借鑒。2016-09-09
Python內(nèi)存管理與泄漏排查實(shí)戰(zhàn)分享
這篇文章主要介紹了Python內(nèi)存管理與泄漏排查實(shí)戰(zhàn),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
python如何通過閉包實(shí)現(xiàn)計(jì)算器的功能
這篇文章主要介紹了python如何通過閉包實(shí)現(xiàn)計(jì)算器的功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Python3.2中Print函數(shù)用法實(shí)例詳解
這篇文章主要介紹了Python3.2中Print函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了Python3.2中Print函數(shù)輸出的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05
pycharm實(shí)現(xiàn)設(shè)置自動(dòng)的參數(shù)注釋標(biāo)識(shí)
這篇文章主要介紹了pycharm實(shí)現(xiàn)設(shè)置自動(dòng)的參數(shù)注釋標(biāo)識(shí),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

