HTML5のcanvasの中身をコピー
先ほどの記事に引き続いてHTML5のcanvasです。 お絵描きをしたcanvasの中身を別のcanvasにコピーしよう、と言う感じ。
とりあえずサンプル。
左のカンバスは絵を描ける。コピーってボタンをクリックすると内容をコピーできる。
<html> <canvas width=320 height=240 style="border: 1px solid black" id=alpha></canvas> <canvas width=320 height=240 style="border: 1px solid black" id=beta></canvas> <button>コピー</button> <script> var alpha = document.querySelector('#alpha'); var beta = document.querySelector('#beta'); var context = alpha.getContext('2d'); alpha.addEventListener('mousedown', function(ev){ context.beginPath(); context.moveTo(ev.offsetX, ev.offsetY); }); alpha.addEventListener('mousemove', function(ev){ if(ev.which){ context.lineTo(ev.offsetX, ev.offsetY); context.stroke(); } }); document.querySelector('button').addEventListener('click', function(ev){ var image = context.getImageData(0, 0, alpha.width, alpha.height); beta.getContext('2d').putImageData(image, 0, 0); }); </script> </html>
ソースコードはこんな。
contextのgetImageData
でカンバスの中身を画像化して、そいつをputImageData
で貼り付ける。
結構お手軽?
2023-08-18 追記
2023年現在の環境で動くように若干コードを修正しました。
修正前は ev.layerX
/ ev.layerY
を使用していたものを、 ev.offsetX
/ ev.offsetY
を使用するように変更してあります。