HTML5のCanvasで画像を描画する方法【drawImage()の使い方を解説】
HTML5の<canvas>タグは、JavaScriptなどのスクリプトを使ってグラフィックスやアニメーションを描画するための要素です。HTML5で新たに導入されたタグであり、ブラウザ上で動的なビジュアル表現を実現できます。
HTML5キャンバスで画像を扱うには、drawImage()メソッドを使用します。このメソッドは、指定した画像をキャンバス上にそのまま描画します。
drawImage()メソッドの基本構文と引数
drawImage()メソッドの基本的な呼び出し形式は次の通りです。
ctx.drawImage(img, x, y);
各引数の意味は以下の通りです。
- img: 描画対象となる画像オブジェクト、または別のキャンバスオブジェクトへの参照
- x: 画像を配置するターゲットキャンバス上のX座標
- y: 画像を配置するターゲットキャンバス上のY座標
サンプルコード
以下のコードを実行すると、キャンバスに背景画像を読み込み、その上に折れ線を描画する一連の流れを確認できます。img.onloadイベントの中で描画処理を行っている点が重要です。画像の読み込みが完了してから描画しないと、真っ白なキャンバスになってしまうことがあります。
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
function drawShape() {
// DOMからcanvas要素を取得
var canvas = document.getElementById('mycanvas');
// canvasがサポートされていない環境では実行しない
if (canvas.getContext) {
// 描画用の2Dコンテキストを取得
var ctx = canvas.getContext('2d');
// 画像を読み込んで図形を描画
var img = new Image();
img.src = '/images/backdrop.jpg';
img.onload = function() {
// 読み込み完了後に画像を描画
ctx.drawImage(img, 0, 0);
ctx.beginPath();
ctx.moveTo(30, 96);
ctx.lineTo(70, 66);
ctx.lineTo(103, 76);
ctx.lineTo(170, 15);
ctx.stroke();
}
} else {
alert('このデモを表示するにはSafariまたはFirefox 1.5+が必要です。');
}
}
</script>
</head>
<body onload="drawShape();">
<canvas id="mycanvas"></canvas>
</body>
</html>
実装時のポイント
- onloadイベントで描画する:
new Image()で生成した画像は非同期で読み込まれるため、必ずimg.onloadのコールバック内でdrawImage()を呼び出しましょう。 - コンテキスト取得前に対応チェック:
canvas.getContextが存在するかどうかを判定することで、canvas未対応の古いブラウザでもエラーを回避できます。 - サイズ指定も可能:
drawImage(img, x, y, width, height)のように幅と高さを指定すると、画像を拡大・縮小して描画できます。
現在の主要ブラウザ(Chrome、Edge、Firefox、Safariなど)はすべてcanvasに対応しているため、特別なプラグインなしに動的なグラフィック描画を行えます。
-
GoogleマップでHTML5 Geolocation APIを使って現在地を表示する方法
HTML5 Geolocation APIとは? HTML5 Geolocation APIは、ユーザーの同意のもとで位置情報をWebサイトと共有できる標準的なブラウザ機能です。JavaScriptでデバイスの緯度・経度を取得し、そのデータをバックエンドのWebサーバーへ送信することで、近くのお店や施設の検索、地図上への現在地表示など、位置情報を活かした多彩な機能を実装できます。Geolocation APIが返す座標は、デバイスの地理的な位置を正確に示します。 ここでは、getCurrentPosition()メソッドを使って現在の位置情報を取得し、Googleマップ(Google Stat
-
【HTML5】ドラッグ&ドロップ(DnD)の実装方法をサンプルコード付きで解説
ドラッグアンドドロップ(Drag and Drop / DnD)は、マウス操作だけで要素のコピー・並べ替え・削除などを直感的に行える、強力なユーザーインターフェースの概念です。ユーザーは要素の上でマウスボタンを押しながらドラッグし、目的の場所でボタンを離すことで、その要素を移動させることができます。従来のHTML4でこの機能を実現するには、複雑なJavaScriptのコーディングや、jQueryのような外部ライブラリ・フレームワークに依存する必要があり、実装のハードルが高いのが課題でした。ところがHTML5では、Drag and Drop(DnD)APIが標準で搭載され、ブラウザ自身がネイティ