小編給大家分享一下canvas與html5怎樣實(shí)現(xiàn)視頻截圖功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鐵山企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,鐵山網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
制作方法:
1.在頁(yè)面中加載視頻
在使用canvas制作這個(gè)截圖功能時(shí),首先必須保證頁(yè)面上已經(jīng)加載完成了這個(gè)視頻,這樣才能夠方便的對(duì)其操作。如果使用下面直接嵌入<video>標(biāo)簽的方式:
<video loop controls id="testmp4" width="500" height="400" > <source src="test.mp4" type="video/mp4"> <source src="test.webm" type="video/webm"> <source src="test.ogg" type="video/ogg"> </video>
在我的那篇《html5與視頻》中講到,瀏覽器對(duì)視頻的預(yù)加載progress以及l(fā)oad事件支持不同,會(huì)影響video的播放及其他事件的觸發(fā)。所以我們?cè)谶@里使用js構(gòu)造video的方式來(lái)引入視頻。
這種方式引入視頻要注意,不能引入多個(gè)source,所以要先判斷瀏覽器對(duì)視頻格式的支持。
1.1使用video的canPlayType()方法判斷支持格式
canPlayType()方法需要傳入一個(gè)參數(shù),這個(gè)參數(shù)就是video的格式,
常用值:
video/ogg; video/mp4; video/webm;
或者包括編碼器:
video/ogg;codecs="theora,vorbis" video/mp4;codecs="avc1.4D401E, mp4a.40.2" video/webm;codesc="vp8.0, vorbis"
返回值:表示網(wǎng)頁(yè)的支持級(jí)別:"probably"-最有可能支持(輸入值帶編碼器的時(shí)候只返回這個(gè));"maybe" - 可能支持;"" - (空字符串)不支持;
function videoType(video){ var returnType=''; if(video.canPlayType('video/mp4')=='probably'||video.canPlayType('video/mp4')=='maybe'){ returnType= 'mp4'; }else if(video.canPlayType('video/ogg')=='probably'||video.canPlayType('video/ogg')=='maybe'){<br> returnType= 'ogg'; <br> }else if(video.canPlayType('video/webm')=='probably'||video.canPlayType('video/webm')=='maybe'){<br> returnType= 'webm'; <br> }<br> return returnType; }
這個(gè)函數(shù)可以判斷瀏覽器對(duì)video支持的格式。
1.2使用js動(dòng)態(tài)加載video標(biāo)簽
這里判斷了瀏覽器的支持格式后,由于我用的是chrome,所以我的瀏覽器支持mp4格式的視頻,然后我們動(dòng)態(tài)創(chuàng)建一個(gè)video標(biāo)簽。
var videoElem; var videop; function createVideo(){ videoElem=document.createElement("video");//創(chuàng)建video videop=document.getElementById("videopanel");//獲取video的外層容器 videop.appendChild(videoElem); var vtype=videoType(videoElem);//判斷瀏覽器支持的格式 if(vtype==""){ videop.innerHtml('不支持video') }else{ videoElem.setAttribute('src',"text."+vtype); } }
由于這里我們要制作截圖功能,單純的video不具備截圖的接口,所以我們要把它復(fù)制到canvas上,在canvas上播出這個(gè)視頻,所以這里我們先把video給隱藏掉(display:none)。
2.使用canvas復(fù)制視頻
現(xiàn)在video已經(jīng)在瀏覽器上播放了,接下來(lái)我們把它復(fù)制到canvas里,首先建立canvas,然后得到畫布context,這些就不說(shuō)了。如何把video畫在canvas上,這里我們要使用一個(gè)函數(shù)。drawImage函數(shù)的用法
1.drawImage(img,x,y):在畫布的(x,y)這個(gè)位置畫一個(gè)img;
2.drawImage(img,x,y,width,height):在畫布的(x,y)這個(gè)位置畫一個(gè)width寬,height高的img;
3.drawImage(img,sx,sy,swidth,sheight,x,y,width,height):在畫布的(x,y)位置畫一個(gè)img的(sx,sy)位置的swidth寬,sheight高的一塊截圖,畫在畫布上要縮放到width寬和height高。
以上就是drawImage的用法了,這個(gè)函數(shù)非常的強(qiáng)大。
回到做截圖,我們現(xiàn)在已經(jīng)在瀏覽器上創(chuàng)建好了畫布--contextVideo,接著我們?cè)谶@里把視頻畫出來(lái):
contextVideo.drawImage(videoElem,0,0);
然后我們可以看到在canvas里畫了一張圖,但是視頻是不斷變化的,所以我們需要使用setInterval函數(shù)不斷的吧video作為源來(lái)畫圖。
setInterval(function(){<br> contextVideo,drawImage(videoElem,0,0);<br>},100)
這里時(shí)間間隔的大小會(huì)影響到視頻播放是否會(huì)卡。
到這里我們就把video搬到canvas上展示了。接下來(lái)制作截圖。
3.制作截圖展示canvas面板
這里我們需要再在頁(yè)面上畫一個(gè)canvas畫布--contextImg,然后再次利用drawImage方法,截圖。
contextImg.drawImage(canvasVideo,0,0,canvasVideo.width,canvasVideo.height);
這段代碼將第一個(gè)canvas畫到了第二個(gè)canvas上。
4.制作截圖按鈕
制作一個(gè)按鈕,然后綁定click事件,點(diǎn)擊后就調(diào)用上一步的函數(shù),這樣就可以制作一個(gè)截圖了。
當(dāng)圖截好后可以將圖右鍵保存下來(lái),然后倒入ps制作表情包了。
以上是“canvas與html5怎樣實(shí)現(xiàn)視頻截圖功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前名稱:canvas與html5怎樣實(shí)現(xiàn)視頻截圖功能-創(chuàng)新互聯(lián)
本文鏈接:http://m.newbst.com/article0/dcddoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站制作、定制開(kāi)發(fā)、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容