標籤: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; |
這個函數可以判斷瀏覽器對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實現視頻功能