這次帶給大家canvas與h5如何實現影片截圖功能,canvas與h5實現影片截圖功能的注意事項有哪些,以下就是實戰案例,一起來看一下。
這段時間一直在研究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"
#web# 8/web. , 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制作表情包了。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是canvas與h5如何實現視訊截圖功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!