這段時間一直在研究canvas,突發奇想想做一個可以截屏視頻的功能,然後把圖片拉去做表情包,哈哈哈哈哈哈~~
製作方法:
1.在頁面中加載視頻在使用canvas製作這個截圖功能時,首先必須保證頁面上已經加載完成了這個視頻,這樣才能夠方便的對其操作。如果使用下面直接嵌入<video>標籤的方式:
<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 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作為源來畫圖。
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製作表情包了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。