【實用技巧】教你如何用PIL給gif文件降幀

2021-03-02 老K玩代碼

關注老K玩代碼公眾號,回復"Python"獲取更多學習資源
kevinchaos微信,驗證"玩代碼", 直接和作者對話

最近在做公眾號的時候,想添加一些gif動圖,好讓內容看起來更生動一些,但卻遇到了這樣的問題。

圖片「

沒錯,微信公眾號規定了上傳的gif最高幀數不能超過300。
考慮到我後面內容中會用到不少gif圖片,並且很多幀數超過300幀;
肯定不可能一張一張地找出來設置幀數。
於是就想著能不能通過Python,實現一鍵壓縮gif幀數的辦法。
網上找了很多資料,沒有令自己滿意的,所以在這裡著手寫一個開發貼,
分享給那些需要對gif自動化降幀的朋友。

1. 準備第三方庫「

我們會用到Python最常用, 功能強大的PIL庫來對圖片進行處理;
同時,我們會用到一個叫做imageio的第三方庫,來對gif進行壓縮。

import os

import imageio
from PIL import Image, ImageSequence

2. 打開gif圖片並逐幀進行保存「

這裡會用到PIL裡一個叫做ImageSequence的模塊,主要用來逐幀展開gif,並返回成迭代器;

im = Image.open(source_file)
index = 1
for frame in ImageSequence.all_frames(im):
frame = frame.convert('RGB')
frame.save(f"gif{index}.jpg", quality=100)
index = index + 1

3. 執行降幀並存儲為gif「

由於要降幀,所以會跳過一些幀幅,變量n是用來計算跳幀頻率的。
這裡使用imageio這個庫,對圖片序列進行保存和壓縮。

n = int(index / frame_limit) + 1
images = []
for i in range(1, index):
if i % n == 0:
images.append(imageio.imread(f'gif{i}.jpg'))
imageio.mimsave(target_file, images, duration=0.1)

4. 將過程文件刪除「

在讀取幀幅的時候,會將幀幅保存在本地的臨時文件;完成降幀後,這些臨時的幀幅圖片會通過下述代碼批量刪除。

for i in range(1, index):
f = 'gif' + str(i) + '.jpg'
if os.path.exists(f):
os.remove(f)

好了,我通過以上的代碼對下圖進行了降幀:

降幀前降幀前降幀後降幀後「

可以看到降幀後圖片中的光標閃爍頻率明顯高於降幀前,實際幀數也從260多幀降到了100多幀。

降幀成功!

有需要的小夥伴,可以在老K玩代碼公眾號回復"降幀",獲取源文件

「如果這篇文章對您有幫助,請記得分享在看這篇文章。如果對文中的內容有疑問、錯誤或有意見想告訴我,歡迎留言。歡迎關注《老K玩代碼》公眾號,獲得更多實戰案例和行業資訊。

不用讚賞,文末點個「在看」就好

相關焦點

  • gif編輯工具本來就少,隔幀取數需求奇葩,告訴你這樣一行搞定
    引言本文最初是源於一個需求,是這樣描述的:如何從動畫gif中每隔一幀移除一次?這問題本身,從職業角度一看,就知道必須用編程,或者工具實現。提問的小哥又詳細進行了描述:我有很多視頻文件,想轉換為gif動圖。ffmpeg/avconv 在直接操作方面做得很差,所以我曲線救國,把視頻轉換為 gif 格式。
  • 【操作技巧】如何在word文檔中插入gif文件
    Excelfan          有些童鞋想寫一些文章時帶上gif文件,便於說明描述問題或者解答操作技巧問題時容易讓人接受學會
  • 如何把視頻轉換成GIF動態圖片?教你這個操作!
    對於gif,相信大家都不會陌生吧?這是一種咱們日常生活中常見的圖片格式,只是它和一般的圖片不一樣,一般的圖片是靜止的,但是這種gif格式的圖片卻是動態的,它也被稱之為動圖。相信很多小夥伴都不知道吧,其實咱們的視頻文件是可以被轉換成gif的,那麼如何把視頻轉換成GIF動態圖片?
  • 教你玩轉PS時間軸之5個小技巧篇
    如果你做的動畫有2700px寬度,你最好在導出之前先把圖像大小降低百分比,再做導出,否則你需要經過漫長時間的等待,甚至出錯。(經驗證明先把PSD圖像降低百分比再導出gif,比進入導出gif面板時降低百分比的文件要小一些)
  • PPT小技巧:如何在PPT裡面製作gif動圖?
    所以,這次想要和大家分享的技巧,就是如何在PPT裡面製作動態的gif圖片。 首先,需要安裝OneKeyTools插件,獲取地址留言,小編會給你下載連結的。其次,使用插入菜單欄,插入6個矩形,並按照2*2到7*7的尺寸進行遞進。
  • gif文件太大怎麼辦?gif動圖如何在線壓縮?
    gif動圖是非常常見的一種圖片格式,平時在使用微信聊天的時候,經常會用到鬥圖,就是gif動圖。很多的用戶收藏或者製作gif動圖,比如使用視頻轉gif、多圖合成gif等方式。當gif圖片越來越多的時候,就會出現內存不足的情況,並且有些動圖由於文件體積太大而不能分享到平臺或者發送給好友,那麼這種時候就需要使用gif壓縮功能來將gif動圖進行壓縮,接下來教大家gif在線編輯,壓縮大小的方法。點擊GIF壓縮功能按鈕,上傳需要進行操作的GIF圖片。
  • 從零了解PS做gif動圖的小知識小技巧(1)
    接下來,我們以漫畫《一品芝麻狐》中的「姑姑」表情gif為例(如下圖),來簡單說下這個製作流程。那麼,設計工具來說,阿隨君主要使用的是PS、AE、Pr這三款Adobe家的軟體。當然了,像PPT、Flash、C4D等等各種軟體都可以拿來使用,大家盡可使用自己上手的「傢伙」。
  • gif製作軟體 如何修改gif畫布大小?
    如何調整gif畫布大小?這個問題,最近很多粉絲都在問!圖片格式有很多,常見的有bmp,jpg,png,tif,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw,WMF,webp,avif等。其中,GIF圖片屬於動態圖比較難處理。
  • 教你如何,用Ps去掉GIF動態圖片背景顏色!
    製作後的效果圖現在開始1.第一步 :準備好一張自己喜歡的GIF動態圖片 , photoshop(作圖工具)如圖:我用的是圖片的原圖2.第二步用PS打開我們所準備的圖片或者將圖片直接拖入5.第五步接下來逐幀刪除每一張圖片的背景,刪的時候記住要選中相應的圖層才能正確刪除(既要選擇"時間軸"的圖層,也要選擇右側對應的圖層),而當選中第二個圖層時發現還保留著上一圖層的虛線,點擊上方「選擇」->「取消選擇」(這樣會比較麻煩),通常我們都會用到快捷鍵 「ctrl + D」來取消選擇
  • 怎樣設置gif的播放速度?
    最近,大家都用上了微信新更新的幾個表情包,別說還挺好玩的。不過,大家都知道微信新表情的正確打開方式嗎?不知道,來來來,看看看!是不是,太!真!實!了!!比如,你知道如何調整gif播放的速度嗎?又不知道吧,沒關係沒關係,繼續往下看!改變動圖的速度,讓gif動圖更形象有趣。下面小編就來演示詳細操作,大家可以參考。
  • Python給gif圖片加文字水印
    安裝它的方式為用cmd命令打開DOS提示符窗口,然後輸入pip install pillow即可。就像下面這樣:如果需要把它保存在磁碟中,那麼用im的save方法,在小括號裡寫上文件名即可。示例代碼為:im.save('李興球Python的半透明圖像.png')ImageFont是用來新建字體對象的,這樣在寫的時候就能描述字體的大小和字體類型。
  • 這幾個超好用的錄屏轉Gif的軟體你不能錯過
    在錄屏領域摸爬滾打這麼久,小E今天就給各位推薦幾款超好用的推薦兩款好用的GIF錄製軟體~ 1.EV視頻轉換器 這是集壓縮體積、添加水印和動圖製作於一身的神器,用起來特別簡單易懂,小白上手毫無壓力。
  • 如何壓縮gif動圖
    今天早上為了把一個gif動圖插入到公眾號,小編可謂是操碎了心。這麼說吧,公眾號要求gif動圖要小於300幀,也不能超過5M,稍微長一點的gif動圖想插進去根本是想都不要想。萬般無奈之下小編緊急get到了一套壓縮gif的新技能,想著大家可能也會遇到類似的問題,就趁熱把教程給大家整理出來了。希望大家繼續每天話一點點時間跟著小編學習一些辦公小技能哦!第一步,直接拖拽文件或點擊添加文件將gif動圖添加進來。第二步,在設置處可以設置壓縮強度、輸出格式與解析度。
  • 如果用Photoshop時間軸做出心動的gif圖
    由於我們愛心跳動的時間不必過長,所以可以將愛心通過拉動進度條縮短,看我框選的地方先打變換幀,開啟前面的小鬧鐘即可打下第一個關鍵幀愛心撲通撲通跳動的時候是不是會一大一小呀,所以接下來我們要將愛心變小再打關鍵幀,Ctrl+t自由變換,把愛心稍微縮小一點,然後按回車鍵點擊確定即可打下第二個關鍵幀
  • gif圖片添加文字,三種方法任你選!
    動圖在文章中的作用,大家都知道,而且動圖的使用範圍很廣,表情達意的能力也很強,之前有不少小夥伴問怎麼在gif圖片上添加文字,那麼今天就來解決這個問題,下面就帶來非常實用的三種方法,可以任意選擇哦。1、soogifsoogif是一個專門的動圖網站,可以搜動圖,同時提供gif編輯、gif裁剪、gif合成、gif拼圖壓縮等多種功能,非常全面。如果要給gif圖片添加文字的話,可以使用gif編輯功能。
  • 如何在速賣通詳情頁插入GIF動態圖片?
    在速賣通詳情頁如何插入GIF圖片?這個確實難住了一批賣家朋友,因為速賣通的產品編輯器是不支持上傳GIF格式圖片的,所以今天就手把手教大家如何製作上傳動態圖片到速賣通的產品詳情頁中。 (動態圖:直觀生動地展示出產品的動態變化效果) 用動態圖來展示產品的動態效果,瞬間感覺高大上了有木有?而且買家可以很容易理解你要表達的產品特點,買家體驗也非常好。
  • 手把手教學,在線製作gif動圖的技巧
    一般情況下,使用動圖都是從網上去進行下載,那麼大家知道怎麼自己動手製作gif動圖嗎?接下來教大家用視頻來製作動圖的方法,希望對大家有幫助。點擊導航欄GIF工具,選擇視頻轉GIF功能,可以看到能夠上傳三種視頻格式,MP4、OGG、WEBM。點擊上傳,將準備好的視頻上傳到網站上。
  • 第35期 ▍用視頻製作gif動態圖片
    視頻轉GIF後,GIF圖片動畫時間長度設置:在界面中下面的滑竿是控制截取GIF動畫的播放長度,設置GIF動畫時長默認時長是5秒,截取最大時間是10秒,一般10秒基本上已經足夠用了。截取時間後點擊預覽,可以看到動畫的效果,如果截取的畫面達不到你的要求,可以使用微調功能,精確調節GIF動畫起始點和結束點,這裡的兩組箭頭按鈕分別用來調整起始點和結束點的時間,可以精確到幀。
  • 簡單幾步教你把mp4轉gif
    怎麼把mp4轉gif製作動圖?想必很多小夥伴對於gif都不會陌生,這是一個常見的圖片格式,但它和別的圖片不同的地方在於gif是一種會動的圖片格式-動態圖。隨著網絡流行語的不斷增多,不少小夥伴喜歡在聊天時發送一些gif動態表情包增添樂趣。那你知道如何把mp4轉gif製作表情包嗎?
  • GIF動態圖片怎麼加文字
    你知道怎麼給gif動態圖片加文字咩?Ahem!~ GIF分為靜態GIF和動態GIF。一般動態gif圖片添加文字如處理不好,就會變成靜態圖片了,這當然不是我們要的效果啦。那怎樣在gif動態圖上加文字,又能完全保留原始動畫信息呢?看看下面的動畫gif添加文字的解決方案,問題也就迎刃而解了。