1. ホーム
  2. Web制作
  3. html5

キャンバスは、ビデオの最初のサムネイルを取得します。

2022-01-11 10:08:52

クエリを記録し、最近再ウォッチキャンバスで時間は、もはやこの問題がない場合、標準としてW3Cの更新に、2019年11月5日に書かれているようにいくつかのDemoを行うには、これは単に参照です キャンバスのビデオの最初のフレームを表示しようとすると、問題が触れた:Chromeで、ビデオで。Firefox の同じコードでは、ロードされていないビデオの最初のフレームを取得し、それをキャンバスにレンダリングできます。以下は、すべてプリロードなしで実行されます。

もしうまくいかなかったら、コメントでそう言ってください。私が書いたデモから一部を切り出しました=。

HTMLコードスニペット

<div class="canvas-class">
 <canvas id="canvasImgDemo"></canvas>
</div>
<div class="img-source">
 <div class="video-div">
  <video id="videoSource" 
   controls="controls" 
   poster 
   src="... /... /resources/1.mp4" 
   onloadeddata="videoGetFirstFrame(this)
  ></video>
 </div>
</div>


Chromeでは、メソッドを表示することができます。

タグにイベント処理を追加し、今回は1フレーム目の画像データを取得します。

 var imgs = [];
 var videoGetFirstFrame = (elem) => {
  var canvas = document.createElement("canvas"),
   img = new Image();
  canvas.getContext("2d").drawImage(elem, 0, 0);

  let dataURL = canvas.toDataURL("image/png");
  img.onload = (e) => {
   var target = document.getElementById("canvasImgDemo"),
    ctx = target.getContext("2d");
   ctx.drawImage(img, 0, 0, target.width, target.height);
  };
  imgs.push(dataURL);
 };



Firefoxで動作します。

以下の2つのメソッドは、Chromeでは画像が表示されませんが、Firefoxでは表示されます。Chrome のコンソールでは、取得した dataURL が実際には完全に透明な長方形であることがわかります。しかし、動画をプリロード、ロード、または一度キャッシュした後は、キャンバスが存在します。

方法1

JSコードスニペット

let elem = document.getElementById("canvasImgDemo"),
 ctx = elem.getContext(module.CONTEXT_TYPE),
 targetElem = document.getElementById(target),
 tagName = targetElem.tagName;
 
ctx.drawImage(targetElem, 0, 0);
var imgData = elem.toDataURL("image/png"),
img = new Image();
img.onload = () => {
 ctx.drawImage(img, 0, 0, elem.width, elem.height);
}
img.src = imgData;


方法2

実は、方法1と似ているのですが、ドキュメントが作成したHTMLVideoElementとのリレーの後にloaddataイベントを発生させるというもので、上記の方法を動画に応用したものです。

let video = document.createElement("video");
video.addEventListener("loadeddata", (evt) => {
 ctx.drawImage(evt.target, 0, 0);
 let dataURL = elem.toDataURL("image/png");
 let img = new Image();
 img.onload = () => {
  ctx.drawImage(img, 0, 0, 300, 150);
 };
 img.src = dataURL;
});
video.src = targetImg.src;
ctx.drawImage(targetImg, 0, 0);


今回の記事は、Canvasで動画の1フレーム目のサムネイルを取得するという内容ですが、もっと関連するCanvas動画のサムネイルの内容は、スクリプトハウスの過去記事を検索するか、以下の関連記事を引き続きご覧ください、今後ともスクリプトハウスをよろしくお願いします!。