這段時間一直在研究canvas,突發奇想想做一個可以截圖影片的功能,然後把圖片拉去做表情包,哈哈哈哈哈哈~~
製作方法:
1 .在頁面中加載視頻
在使用canvas製作這個截圖功能時,首先必須保證頁面上已經加載完成了這個視頻,這樣才能夠方便的對其操作。如果使用下面直接嵌入
<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 " - 可能支援;"" - (空字串)不支援;
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; }
這個函數可以判斷瀏覽器對video支援的格式。
1.2使用js動態載入video標籤
這裡判斷了瀏覽器的支援格式後,由於我用的是chrome,所以我的瀏覽器支援mp4格式的視頻,然後我們動態創建一個video標籤。
var videoElem; var videop; function createVideo(){ videoElem=document.createElement("video");//创建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不具備截圖的接口,所以我們要把它複製到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作為來源來繪製圖片。
setInterval(function(){<br> contextVideo,drawImage(videoElem,0,0);<br>},100)
這裡時間間隔的大小會影響到影片播放是否會卡片。
到這裡我們就把video搬到canvas上展示了。接下來製作截圖。
3.製作截圖展示canvas面板
這裡我們需要再在頁面上畫一個canvas畫布--contextImg,然後再利用drawImage方法,截圖。
contextImg.drawImage(canvasVideo,0,0,canvasVideo.width,canvasVideo.height);
這段程式碼將第一個canvas畫到了第二個canvas上。
4.製作截圖按鈕
製作一個按鈕,然後綁定click事件,點擊後就呼叫上一個步驟的函數,這樣就可以製作一個截圖了。
當圖截好後可以將圖右鍵儲存下來,然後倒入ps製作表情包了。
以上就是canvas與html5實作視訊截圖功能範例 的內容,更多相關內容請關注PHP中文網(www.php.cn)!