canvas與html5實現視頻截圖功能

來源:互聯網
上載者:User

標籤:ima   參數   ane   其他   開啟   images   video   alt   source   

這段時間一直在研究canvas,突發奇想想做一個可以截屏視頻的功能,然後把圖片拉去做表情包,哈哈哈哈哈哈~~

製作方法:

1.在頁面中載入視頻

在使用canvas製作這個功能時,首先必須保證頁面上已經載入完成了這個視頻,這樣才能夠方便的對其操作。如果使用下面直接嵌入<video>標籤的方式:

12345 <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與視頻》中講到,瀏覽器對視頻的預先載入progress以及load事件支援不同,會影響video的播放及其他事件的觸發。所以我們在這裡使用js構造video的方式來引入視頻。

這種方式引入視頻要注意,不能引入多個source,所以要先判斷瀏覽器對視頻格式的支援。

1.1使用video的canPlayType()方法判斷支援格式

canPlayType()方法需要傳入一個參數,這個參數就是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"

傳回值:表示網頁的支援層級:"probably"-最有可能支援(輸入值帶編碼器的時候只返回這個);"maybe" - 可能支援;"" - (Null 字元串)不支援;

12345 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;
1 }

這個函數可以判斷瀏覽器對video支援的格式。

 

1.2使用js動態載入video標籤

這裡判斷了瀏覽器的支援格式後,由於我用的是chrome,所以我的瀏覽器支援mp4格式的視頻,然後我們動態建立一個video標籤。

1234567891011121314 var videoElem;var videoDiv;function createVideo(){     videoElem=document.createElement("video");//建立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不具備的介面,所以我們要把它複製到canvas上,在canvas上播出這個視頻,所以這裡我們先把video給隱藏掉(display:none)。

 

2.使用canvas複製視頻

現在video已經在瀏覽器上播放了,接下來我們把它複製到canvas裡,首先建立canvas,然後得到畫布context,這些就不說了。如何把video畫在canvas上,這裡我們要使用一個函數。drawImage函數的用法

1.drawImage(img,x,y):在畫布的(x,y)這個位置畫一個img;

2.drawImage(img,x,y,width,height):在畫布的(x,y)這個位置畫一個width寬,height高的img;

3.drawImage(img,sx,sy,swidth,sheight,x,y,width,height):在畫布的(x,y)位置畫一個img的(sx,sy)位置的swidth寬,sheight高的一塊,畫在畫布上要縮放到width寬和height高。

以上就是drawImage的用法了,這個函數非常的強大。

 

回到做,我們現在已經在瀏覽器上建立好了畫布--contextVideo,接著我們在這裡把視頻畫出來:

contextVideo.drawImage(videoElem,0,0);

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

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

這裡時間間隔的大小會影響到視頻播放是否會卡。  

到這裡我們就把video搬到canvas上展示了。接下來製作。

 

3.製作展示canvas面板

這裡我們需要再在頁面上畫一個canvas畫布--contextImg,然後再次利用drawImage方法,。

1 contextImg.drawImage(canvasVideo,0,0,canvasVideo.width,canvasVideo.height);

這段代碼將第一個canvas畫到了第二個canvas上。

 

4.製作按鈕

製作一個按鈕,然後綁定click事件,點擊後就調用上一步的函數,這樣就可以製作一個了。

當圖截好後可以將圖右鍵儲存下來,然後倒入ps製作表情包了。

 

5.demo及一些表情包。

視頻:Demo;(開啟之前請調小音量,點擊坐上click即可)

表情包:

canvas與html5實現視頻功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.