日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

用Python將動態(tài)GIF圖片倒放播放的方法

系統(tǒng) 3163 0

這次讓我們一個用 Python 做一個小工具:將動態(tài) GIF 圖片倒序播放!

用Python將動態(tài)GIF圖片倒放播放的方法_第1張圖片

GIF(Graphics Interchange Format) 是一種可以用來呈現(xiàn)動畫效果的圖片格式,原理就是保存很多幀(Frame)靜態(tài)圖像,然后連續(xù)呈現(xiàn)。很多簡短的視頻也會被轉(zhuǎn)換成動態(tài) GIF 呈現(xiàn),壓縮畫質(zhì)和去除聲音之后可以有效地減小文件大小。網(wǎng)絡(luò)上不計其數(shù)的搞笑動圖,幾乎承載了網(wǎng)友大半的歡樂,但是也有人發(fā)現(xiàn),將正常的動畫倒序播放往往可以獲得更搞笑的效果,Reddit 上甚至有一個專門的節(jié)點(diǎn):/r/reversegif。

要做到這一點(diǎn)其實(shí)很簡單,只要從原始圖片中提取中間每一幀靜態(tài)圖像,然后將順序顛倒之后重新生成一張 GIF 圖片即可。Python 中專門用于處理圖像的庫是 PIL,在 PIL 基礎(chǔ)上由 Alex Clark 等人開發(fā)了一個更友好的版本:Pillow。于是首先來安裝(或升級)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 可以先讀取圖片文件并判斷該圖片是否為動態(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, ...])
          

通過設(shè)定 save_all=True 參數(shù)和 append_images 可以一次性將多幀圖像同時存入 GIF 圖片,于是我們可以這樣來生成倒序播放的圖片:

            
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)置列表倒序方法
# 將倒序后的所有幀圖像保存下來
frames[0].save('out.gif', save_all=True, append_images=frames[1:])
          

用Python將動態(tài)GIF圖片倒放播放的方法_第2張圖片

再來看一個比較明顯的效果:

用Python將動態(tài)GIF圖片倒放播放的方法_第3張圖片

為了滿足微信2M 圖片大小限制,倒序圖片經(jīng)過了采樣壓縮處理

如果想要達(dá)到鬼畜一些的效果,還可以對所有幀隨機(jī)打亂順序:

            
import random
# frames.reverse()
random.shuffle(frames)
          

效果如下:

用Python將動態(tài)GIF圖片倒放播放的方法_第4張圖片

以上所述是小編給大家介紹的用Python將動態(tài)GIF圖片倒放播放的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 简阳市| 濮阳县| 噶尔县| 政和县| 丁青县| 三门县| 三江| 湖口县| 蓬溪县| 九寨沟县| 剑阁县| 岳阳市| 景德镇市| 萍乡市| 石家庄市| 旬邑县| 永福县| 泰宁县| 额敏县| 芒康县| 洞头县| 若羌县| 无为县| 太保市| 玉环县| 随州市| 长兴县| 哈尔滨市| 柳州市| 沙湾县| 汉源县| 新巴尔虎右旗| 正镶白旗| 南安市| 依安县| 呼和浩特市| 新乡县| 苍南县| 历史| 华池县| 雷州市|