Canvas APIは、ブラウザの中に画像を描くための場所を用意し、JavaScriptから内容を変えられる仕組みです。図形や画像だけでなく、映像の一場面を描くこともできます。
ブラウザの中で画像を描く
Webページには、描画用の領域としてHTMLのcanvas要素を置けます。JavaScriptから2D用の描画機能を取り出すと、線を引く、画像を置く、画素を調べるといった操作ができます。この2D描画機能の名前がCanvasRenderingContext2Dです。
画像や映像をCanvasへ写すときはdrawImage()を使います。video要素も描画元にできるため、カメラ映像の一場面を画像として扱えます。
描いた画像は、色を表す小さな点である画素ごとに読み取れます。getImageData()で画素を読み取り、色の計算や比較をしたあと、putImageData()で書き戻せます。
完成した描画内容は、toBlob()やtoDataURL()を使って画像データへ変換できます。
別のWebサイトから読み込んだ画像には、ブラウザの安全上の制限がかかる場合があります。読み込み元が利用を許可するCORSという設定がない状態で描くと、Canvasの画素を読み取ったり保存したりできなくなることがあります。
画像の組み立てと画素の比較
映像から細い帯を切り出し、位置をずらしながら一枚のCanvasへ順番に描くと、場所ごとに異なる時点の映像を組み合わせられます。
複数の画像をCanvasへ描き、対応する画素の明るさや色を比較すれば、変化が大きい部分だけを残す処理も作れます。
どちらも同じCanvas APIを使いますが、一方は描画位置を変えながら画像を合成する処理、もう一方は画素データを数値として比較する処理です。
Canvas APIはカメラへのアクセスや3D空間の管理を直接担当しません。カメラ映像の取得にはMedia Capture and Streams API、3D表示にはThree.jsなど、役割の異なる仕組みを組み合わせられます。
使ったアプリ
- タイムスキャンカメラ — カメラ映像の一部を順番に描き、一枚の画像を作る処理
- Chrono Sculpture — 撮影画像の取り込み、画素の比較、「動体のみ」の画像づくり