主頁 > 知識(shí)庫 > canvas與html5實(shí)現(xiàn)視頻截圖功能示例

canvas與html5實(shí)現(xiàn)視頻截圖功能示例

熱門標(biāo)簽:西寧智能外呼系統(tǒng)加盟 聯(lián)通400電話申請(qǐng) 百應(yīng)電銷機(jī)器人產(chǎn)業(yè) 高德地圖標(biāo)注賓館位置 飛亞外呼系統(tǒng) 杭州營(yíng)銷電銷機(jī)器人供應(yīng)商 電話機(jī)器人如何 電視購物電銷外呼系統(tǒng) 貸款電銷人工和機(jī)器人哪個(gè)好

這段時(shí)間一直在研究canvas,突發(fā)奇想想做一個(gè)可以截屏視頻的功能,然后把圖片拉去做表情包,哈哈哈哈哈哈~~

制作方法:

1.在頁面中加載視頻

在使用canvas制作這個(gè)截圖功能時(shí),首先必須保證頁面上已經(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的方式來引入視頻。

這種方式引入視頻要注意,不能引入多個(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)頁的支持級(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 videoDiv;

function createVideo(){

     videoElem=document.createElement("video");//創(chuàng)建video

     videoDiv=document.getElementById("videopanel");//獲取video的外層容器

     videoDiv.appendChild(videoElem);

     var vtype=videoType(videoElem);//判斷瀏覽器支持的格式

     if(vtype==""){

        videoDiv.innerHtml('不支持video')

    }else{

        videoElem.setAttribute('src',"text."+vtype);
    }
}         

由于這里我們要制作截圖功能,單純的video不具備截圖的接口,所以我們要把它復(fù)制到canvas上,在canvas上播出這個(gè)視頻,所以這里我們先把video給隱藏掉(display:none)。

2.使用canvas復(fù)制視頻

現(xiàn)在video已經(jīng)在瀏覽器上播放了,接下來我們把它復(fù)制到canvas里,首先建立canvas,然后得到畫布context,這些就不說了。如何把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è)谶@里把視頻畫出來:

contextVideo.drawImage(videoElem,0,0);

然后我們可以看到在canvas里畫了一張圖,但是視頻是不斷變化的,所以我們需要使用setInterval函數(shù)不斷的吧video作為源來畫圖。

setInterval(function(){<br>    contextVideo,drawImage(videoElem,0,0);<br>},100) 

這里時(shí)間間隔的大小會(huì)影響到視頻播放是否會(huì)卡。  

到這里我們就把video搬到canvas上展示了。接下來制作截圖。

 3.制作截圖展示canvas面板

這里我們需要再在頁面上畫一個(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)圖截好后可以將圖右鍵保存下來,然后倒入ps制作表情包了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:玉溪 安慶 撫州 邯鄲 煙臺(tái) 內(nèi)蒙古 晉中 牡丹江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《canvas與html5實(shí)現(xiàn)視頻截圖功能示例》,本文關(guān)鍵詞  canvas,與,html5,實(shí)現(xiàn),視頻,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《canvas與html5實(shí)現(xiàn)視頻截圖功能示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于canvas與html5實(shí)現(xiàn)視頻截圖功能示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章