Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
gif圖就是動(dòng)態(tài)圖,它的原理和視頻有點(diǎn)類似,也是通過(guò)很多靜態(tài)圖片合成的.本篇文章主要介紹,如何利用Python快速合成gif圖,主要利用Python的第三方庫(kù)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)
通過(guò)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讀取圖片的時(shí)候可能會(huì)報(bào)seek的錯(cuò)誤,這時(shí)候可以改成下面的形式
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讀取視頻的時(shí)候可能會(huì)報(bào)上面的錯(cuò)誤,提示需要安裝ffmpeg,可以根據(jù)提示進(jìn)行安裝即可.除此之外,imageio還提供了許多方便的接口,有興趣的可以去了解一下.
了參加最近的StackExchange的“time”主題比賽,我制作了一個(gè)Gif來(lái)展示StackOverflow網(wǎng)站從2008年 到今天的發(fā)展歷程:
這里是一張GIF圖片,可以點(diǎn)擊閱讀原文查看。圖片太大,無(wú)法插入公眾號(hào)文章。
第一步是為Internet Archive找到一個(gè)合適的API。它支持Memento,這是2013年RFC 7089中定義的基于http的協(xié)議。使用memento_client包裝器,我們可以使用以下Python代碼得到網(wǎng)站最接近給定日期的快照:
不要忘記安裝memento_client庫(kù)哦:
pip install memento_client
請(qǐng)注意,此代碼會(huì)給我們一個(gè)最接近的快照,所以不可能確切地是兩周以前的。
通過(guò)使用一個(gè)持續(xù)增加的時(shí)間增量,我們可以循環(huán)此段代碼來(lái)獲取不同 時(shí)間的快照。但我們不只是想獲取URL。我們還想對(duì)每一個(gè)網(wǎng)頁(yè)都做一個(gè)截圖。
以編程方式獲取網(wǎng)頁(yè)截圖的最簡(jiǎn)單方法可能是使用Selenium。我用Chrome作為驅(qū)動(dòng)程序;你可以從ChromeDriver網(wǎng)站下載,也可以在使用Homebrew包管理器的Mac電腦上運(yùn)行以下命令:
brew install bfontaine /utils/ chromedriver
我們還需要為Python安裝Selenium:
pip install selenium
代碼很短:
如果你運(yùn)行上面的代碼,你會(huì)看到一個(gè)Chrome窗口自動(dòng)打開,并自動(dòng)去訪問URL,當(dāng)頁(yè)面全部加載后自動(dòng)關(guān)閉。然后你就獲得了一個(gè)該頁(yè)面的截圖,文件名是 stackoverflow_20181119211854.png!然而,很快你就會(huì)注意到這個(gè)截圖中網(wǎng)站的最上面有Wayback Machine(一款網(wǎng)頁(yè)備份工具)的頁(yè)眉。
這在手動(dòng)瀏覽快照時(shí)非常方便,但在從Python訪問快照時(shí)就不那么方便了。
幸運(yùn)的是,我們可以通過(guò)稍微修改URL來(lái)獲得一個(gè)無(wú)頁(yè)眉的URL:我們可以將 id _ 添加到日期的末尾,以便獲得與機(jī)器爬取時(shí)完全相同的頁(yè)面。當(dāng)然,這意味著它會(huì)鏈接到可能不再存在的CSS和JS文件。通過(guò)用im_替代id_,我們也可以得到一個(gè)鏈接到經(jīng)過(guò)稍微修改的存檔頁(yè)面的URL,用它來(lái)替換原始的存檔頁(yè)面。
帶有頁(yè)眉和重寫鏈接的頁(yè)面:
https://web.archive.org/web/20181119211854/...
原始頁(yè)面,跟爬取的頁(yè)面一樣:
https://web.archive.org/web/20181119211854id_/...
重寫鏈接后的原始頁(yè)面:
https://web.archive.org/web/20181119211854im_/...
使用修改后的URL重新運(yùn)行代碼會(huì)得到正確的截圖:
將這兩段代碼組合起來(lái),我們可以在不同的時(shí)間間隔對(duì)URL進(jìn)行截圖。你可能想在截圖完成時(shí)檢查圖片,并刪除不一致的圖片。例如,谷歌主頁(yè)的存檔快照并不是一直都是同一種語(yǔ)言。
一旦得到了所有的圖片,我們就可以使用Imagemagick生成一個(gè)gif:
convert –delay 50 –loop 1 *.jpg stackoverflow.gif
我使用了以下參數(shù):
–delay 50:每0.5s改變畫面。數(shù)字代表每1/100秒。
–loop 1:對(duì)所有畫面只循環(huán)一次。默認(rèn)情況下是進(jìn)行無(wú)限循環(huán),但在這里沒有意義。
你可能想要使用-delay參數(shù)進(jìn)行播放,這取決于你有多少圖片以及網(wǎng)站改變的頻率。
我也做了一個(gè)谷歌版本(約10MB)的gif,每秒5幀,并使用了 –delay 20參數(shù)。我使用了與StackOverflow gif相同的延遲時(shí)間::每個(gè)截圖之間至少間隔5周。通過(guò)查看每張圖片的底部,你可以看到每個(gè)截圖來(lái)自哪一年。
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)常會(huì)看到很多由視頻片段制作而來(lái)的動(dòng)圖,這種截取視頻片段內(nèi)容來(lái)制作成GIF表情包的方法其實(shí)并不困難,接下來(lái)我將推薦三種方法來(lái)快速完成視頻到GIF動(dòng)圖的轉(zhuǎn)換。簡(jiǎn)單幾步就可以輕松搞定。
一、萬(wàn)興優(yōu)轉(zhuǎn)桌面端
1、啟動(dòng)萬(wàn)興優(yōu)轉(zhuǎn)然后選擇工具箱板塊,單擊GIF動(dòng)圖制作功能
2、在新的彈窗中選擇視頻轉(zhuǎn)GIF動(dòng)圖功能,然后點(diǎn)擊添加圖標(biāo)將本地的視頻文件導(dǎo)入至產(chǎn)品當(dāng)中。
3、導(dǎo)入視頻后你可以直接拖動(dòng)進(jìn)度條兩端來(lái)控制轉(zhuǎn)換的視頻片段,另一種方法是直接設(shè)定開始和結(jié)束的時(shí)間。然后自定義輸出的大小和幀率,直接點(diǎn)擊創(chuàng)建GIF動(dòng)圖即可。
二、萬(wàn)興優(yōu)轉(zhuǎn)在線端
1、在瀏覽器中登錄https://www.media.io/zh/gif-maker.html,進(jìn)入視頻轉(zhuǎn)GIF功能頁(yè)面,點(diǎn)擊選擇文件按鈕將視頻內(nèi)容導(dǎo)入至工具中。
2、接下來(lái)選擇GIF動(dòng)圖的開始時(shí)間和結(jié)束時(shí)間,你還可以控制輸出的大小和幀速率,最后點(diǎn)擊創(chuàng)建GIF按鈕即可完成工作。
三、美圖秀秀
如果你只是將多張圖片進(jìn)行合并來(lái)做成動(dòng)圖的效果,那你可以使用美圖秀秀的圖片合并功能,只需要依次放入多張圖片即可,效果就會(huì)是按順序來(lái)播放圖片。
當(dāng)然這種圖片拼接的效果有限,更多時(shí)候我們會(huì)需要選擇將視頻的片段截取為GIF動(dòng)圖,所以萬(wàn)興優(yōu)轉(zhuǎn)還是你的最優(yōu)選擇。另外有個(gè)好消息分享給大家,萬(wàn)興優(yōu)轉(zhuǎn)雙十二優(yōu)惠活動(dòng)已經(jīng)于12月1日上線了,這次活動(dòng)還新增了月度增值服務(wù)包的限時(shí)特賣,有需要的小伙伴可以前往官網(wǎng)了解。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。