Canvasとhtml5を使った動画スクリーンショット機能の実装例

黄舟
リリース: 2018-05-11 16:20:22
オリジナル
3683 人が閲覧しました

この間キャンバスの勉強をしていたのですが、ふと動画のスクリーンショットを撮って、その写真を引っ張ってきて絵文字を作る機能を作ろうと思いつきました、はははははは~~
制作方法:
1.に動画を読み込みます。ページ
キャンバスを使用してこのスクリーンショット機能を作成する場合、簡単に操作できるように、まずビデオがページにロードされていることを確認する必要があります。

<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 とビデオ」で、ブラウザーがビデオのプリロードの進行状況とロード イベントのサポートを異なると述べました。これは、ビデオの再生に影響します。ビデオやその他のイベントトリガー。そこでここでは動画を紹介するためにjsを使って動画を構築していきます。
この方法でビデオを導入する場合は、複数のソースを導入できないため、最初にブラウザがビデオ形式をサポートしているかどうかを確認する必要があります。
1.1 ビデオの canPlayType() メソッドを使用して、サポートされている形式を決定します。canPlayType() メソッドは、ビデオの形式を渡す必要があります。共通の値:

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"
ログイン後にコピー

戻り値: Web ページのサポート レベルを示します。「おそらく」 - サポートされる可能性が最も高い (入力値にエンコーダーがある場合にのみ返されます)。「おそらく」 - サポートされる可能性があります。 string) はサポートされていません。

function videoType(video){

    var returnType=&#39;&#39;;

    if(video.canPlayType(&#39;video/mp4&#39;)==&#39;probably&#39;||video.canPlayType(&#39;video/mp4&#39;)==&#39;maybe&#39;){

      returnType= &#39;mp4&#39;;

    }else if(video.canPlayType(&#39;video/ogg&#39;)==&#39;probably&#39;||video.canPlayType(&#39;video/ogg&#39;)==&#39;maybe&#39;){<br>     
    returnType= &#39;ogg&#39;;    
    <br>   
    }else if(video.canPlayType(&#39;video/webm&#39;)==&#39;probably&#39;||video.canPlayType(&#39;video/webm&#39;)==&#39;maybe&#39;){<br>     
    returnType= &#39;webm&#39;;    <br>   }<br>   return returnType; 

}
ログイン後にコピー

この関数は、ブラウザーがサポートするビデオの形式を決定できます。

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(&#39;不支持video&#39;)

    }else{

        videoElem.setAttribute(&#39;src&#39;,"text."+vtype);
    }
}
ログイン後にコピー

ここでスクリーンショット機能を作成したいので、単純なビデオにはスクリーンショットインターフェイスがありません。そのため、それをキャンバスにコピーして、キャンバス上でビデオを再生する必要があるため、ここでは最初にビデオを非表示にします(表示:なし) )。

2. キャンバスを使用してビデオをコピーします
ブラウザ上でビデオが再生されたので、まずキャンバスを作成し、次にキャンバスのコンテキストを取得します。詳細はこちら。キャンバス上にビデオを描画する方法。ここでは関数を使用する必要があります。 drawImage関数の使い方
1.drawImage(img,x,y): キャンバスの位置(x,y)にimgを描画します

2.drawImage(img,x,y,width,height):描画します。キャンバス上の画像 (x, y) で幅と高さの画像を描画します

3.drawImage(img,sx,sy,swidth,sheight,x,y,width,height): (x,y); Canvas ) の位置に、img の幅と高さのスクリーンショットを (sx, sy) の位置に描画します。キャンバス上に描画するときは、その幅と高さに合わせて拡大縮小する必要があります。

上記はdrawImageの使い方です。この関数は非常に強力です。

スクリーンショットの撮影に戻り、ブラウザ上でキャンバス - contextVideo を作成しました。そして、ここにビデオを描画します:

contextVideo.drawImage(videoElem,0,0);
ログイン後にコピー

すると、キャンバスに画像が描画されていることがわかりますが、ビデオは常に変化しています。したがって、setInterval 関数を使用して、画像を描画するソースとしてビデオを継続的に使用する必要があります。

setInterval(function(){<br>    contextVideo,drawImage(videoElem,0,0);<br>},100)
ログイン後にコピー

ここでの時間間隔の大きさは、ビデオの再生がフリーズするかどうかに影響します。

この時点で、表示のためにビデオをキャンバスに移動しました。次にスクリーンショットを作成します。


3. スクリーンショットを作成して、キャンバス パネルを表示します
ここでは、ページ上に別のキャンバス (contextImg) を描画し、再度drawImage メソッドを使用してスクリーンショットを撮る必要があります。

contextImg.drawImage(canvasVideo,0,0,canvasVideo.width,canvasVideo.height);
ログイン後にコピー

このコードは、最初のキャンバスを 2 番目のキャンバスに描画します。

4. スクリーンショットボタンを作成します
ボタンを作成し、クリックした後、前のステップの関数が呼び出され、スクリーンショットを作成できるようになります。 写真を撮った後、写真を右クリックして保存し、PS にインポートして絵文字パッケージを作成できます。


上記は、canvas と html5 で実装されたビデオ スクリーンショット機能の例の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

Canvasとhtml5を使った動画スクリーンショット機能の実装例

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!