首頁 web前端 H5教程 canvas與h5如何實現視訊截圖功能

canvas與h5如何實現視訊截圖功能

Mar 26, 2018 am 11:59 AM
canvas html5 截圖

這次帶給大家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中文网其它相关文章!

推荐阅读:

分页查询的使用详解

JS的日期相关函数使用详解

以上是canvas與h5如何實現視訊截圖功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

See all articles