gif圖就是動態(tài)圖,它的原理和視頻有點類似,也是通過很多靜態(tài)圖片合成的.本篇文章主要介紹,如何利用Python快速合成gif圖,主要利用Python的第三方庫imageio
imageio提供了很多方便讀寫圖片的接口、包括讀取網(wǎng)絡(luò)圖片、讀取視頻、生成gif圖等。imageio提供許多的接口,
imageio API:https://imageio.readthedocs.io/en/latest/userapi.html
示例程序:https://imageio.readthedocs.io/en/latest/examples.html
pip install imageio
合成gif圖
import imageio def compose_gif(): img_paths = ["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg" ,"img/5.jpg","img/6.jpg"] gif_images = [] for path in img_paths: gif_images.append(imageio.imread(path)) imageio.mimsave("test.gif",gif_images,fps=1)
通過fps參數(shù)可以控制合成gif圖片播放圖片的速度和視頻的播放幀率是一樣的,fps參數(shù)越大播放的速率越大,fps越小播放的速度越慢.
import imageio import matplotlib.pyplot as plt def read_special_url_image(): img = imageio.imread("imageio:chelsea.png") plt.imshow(img) plt.show()
url = 'http://upload.wikimedia.org/wikipedia/ commons/d/de/Wikipedia_Logo_1.0.png' img = imageio.imread(url)
在使用url讀取圖片的時候可能會報seek的錯誤,這時候可以改成下面的形式
url = "https://timgsa.baidu.com/timg?image&quality=80&size= b9999_10000&sec=1545324012100&di=77a4ba3d60cdfc60 d161bd6ed97c2319&imgtype=0&src=http%3A%2F%2Fwww.hxzyt j.com%2Fthemes%2Ftheme_3%2Fpc%2Fimages%2Fpython%2Fimg_01.jpg" img = imageio.imread(imageio.core.urlopen(url).read(), '.jpg')
#截屏 img = imageio.imread("<screen>") #讀取粘貼板的圖片 img = imageio.imread("<clipboard>")
def get_video_per_frame(): reader = imageio.get_reader("test.mp4") for i,im in enumerate(reader): print("Mean of frame %i is %1.1f"%(i,im.mean()))
在使用imageio讀取視頻的時候可能會報上面的錯誤,提示需要安裝ffmpeg,可以根據(jù)提示進(jìn)行安裝即可.除此之外,imageio還提供了許多方便的接口,有興趣的可以去了解一下.
了參加最近的StackExchange的“time”主題比賽,我制作了一個Gif來展示StackOverflow網(wǎng)站從2008年 到今天的發(fā)展歷程:
這里是一張GIF圖片,可以點擊閱讀原文查看。圖片太大,無法插入公眾號文章。
第一步是為Internet Archive找到一個合適的API。它支持Memento,這是2013年RFC 7089中定義的基于http的協(xié)議。使用memento_client包裝器,我們可以使用以下Python代碼得到網(wǎng)站最接近給定日期的快照:
不要忘記安裝memento_client庫哦:
pip install memento_client
請注意,此代碼會給我們一個最接近的快照,所以不可能確切地是兩周以前的。
通過使用一個持續(xù)增加的時間增量,我們可以循環(huán)此段代碼來獲取不同 時間的快照。但我們不只是想獲取URL。我們還想對每一個網(wǎng)頁都做一個截圖。
以編程方式獲取網(wǎng)頁截圖的最簡單方法可能是使用Selenium。我用Chrome作為驅(qū)動程序;你可以從ChromeDriver網(wǎng)站下載,也可以在使用Homebrew包管理器的Mac電腦上運行以下命令:
brew install bfontaine /utils/ chromedriver
我們還需要為Python安裝Selenium:
pip install selenium
代碼很短:
如果你運行上面的代碼,你會看到一個Chrome窗口自動打開,并自動去訪問URL,當(dāng)頁面全部加載后自動關(guān)閉。然后你就獲得了一個該頁面的截圖,文件名是 stackoverflow_20181119211854.png!然而,很快你就會注意到這個截圖中網(wǎng)站的最上面有Wayback Machine(一款網(wǎng)頁備份工具)的頁眉。
這在手動瀏覽快照時非常方便,但在從Python訪問快照時就不那么方便了。
幸運的是,我們可以通過稍微修改URL來獲得一個無頁眉的URL:我們可以將 id _ 添加到日期的末尾,以便獲得與機(jī)器爬取時完全相同的頁面。當(dāng)然,這意味著它會鏈接到可能不再存在的CSS和JS文件。通過用im_替代id_,我們也可以得到一個鏈接到經(jīng)過稍微修改的存檔頁面的URL,用它來替換原始的存檔頁面。
帶有頁眉和重寫鏈接的頁面:
https://web.archive.org/web/20181119211854/...
原始頁面,跟爬取的頁面一樣:
https://web.archive.org/web/20181119211854id_/...
重寫鏈接后的原始頁面:
https://web.archive.org/web/20181119211854im_/...
使用修改后的URL重新運行代碼會得到正確的截圖:
將這兩段代碼組合起來,我們可以在不同的時間間隔對URL進(jìn)行截圖。你可能想在截圖完成時檢查圖片,并刪除不一致的圖片。例如,谷歌主頁的存檔快照并不是一直都是同一種語言。
一旦得到了所有的圖片,我們就可以使用Imagemagick生成一個gif:
convert –delay 50 –loop 1 *.jpg stackoverflow.gif
我使用了以下參數(shù):
–delay 50:每0.5s改變畫面。數(shù)字代表每1/100秒。
–loop 1:對所有畫面只循環(huán)一次。默認(rèn)情況下是進(jìn)行無限循環(huán),但在這里沒有意義。
你可能想要使用-delay參數(shù)進(jìn)行播放,這取決于你有多少圖片以及網(wǎng)站改變的頻率。
我也做了一個谷歌版本(約10MB)的gif,每秒5幀,并使用了 –delay 20參數(shù)。我使用了與StackOverflow gif相同的延遲時間::每個截圖之間至少間隔5周。通過查看每張圖片的底部,你可以看到每個截圖來自哪一年。
2018年 12月3日-#experiments,#imagemagick,#python,#selenium
——Baptiste Fontaine"s Blog
英文原文:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE2/record-website-change-gif.pdf
譯者:浣熊君( ????? )
在人們經(jīng)常會看到很多由視頻片段制作而來的動圖,這種截取視頻片段內(nèi)容來制作成GIF表情包的方法其實并不困難,接下來我將推薦三種方法來快速完成視頻到GIF動圖的轉(zhuǎn)換。簡單幾步就可以輕松搞定。
一、萬興優(yōu)轉(zhuǎn)桌面端
1、啟動萬興優(yōu)轉(zhuǎn)然后選擇工具箱板塊,單擊GIF動圖制作功能
2、在新的彈窗中選擇視頻轉(zhuǎn)GIF動圖功能,然后點擊添加圖標(biāo)將本地的視頻文件導(dǎo)入至產(chǎn)品當(dāng)中。
3、導(dǎo)入視頻后你可以直接拖動進(jìn)度條兩端來控制轉(zhuǎn)換的視頻片段,另一種方法是直接設(shè)定開始和結(jié)束的時間。然后自定義輸出的大小和幀率,直接點擊創(chuàng)建GIF動圖即可。
二、萬興優(yōu)轉(zhuǎn)在線端
1、在瀏覽器中登錄https://www.media.io/zh/gif-maker.html,進(jìn)入視頻轉(zhuǎn)GIF功能頁面,點擊選擇文件按鈕將視頻內(nèi)容導(dǎo)入至工具中。
2、接下來選擇GIF動圖的開始時間和結(jié)束時間,你還可以控制輸出的大小和幀速率,最后點擊創(chuàng)建GIF按鈕即可完成工作。
三、美圖秀秀
如果你只是將多張圖片進(jìn)行合并來做成動圖的效果,那你可以使用美圖秀秀的圖片合并功能,只需要依次放入多張圖片即可,效果就會是按順序來播放圖片。
當(dāng)然這種圖片拼接的效果有限,更多時候我們會需要選擇將視頻的片段截取為GIF動圖,所以萬興優(yōu)轉(zhuǎn)還是你的最優(yōu)選擇。另外有個好消息分享給大家,萬興優(yōu)轉(zhuǎn)雙十二優(yōu)惠活動已經(jīng)于12月1日上線了,這次活動還新增了月度增值服務(wù)包的限時特賣,有需要的小伙伴可以前往官網(wǎng)了解。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。