Hyper Text Markup Language 5

画像の組み込み

キャンバスに画像を組み込みます。必要であればサイズを指定して組み込むことができます。さらに範囲を指定してトリミングを行い、その部分を組み込むことも可能です。また、画像はImageオブジェクトを生成して、それに読み込ませます。それぞれのコードは以下の通りです。

// 画像の組み込み
	drawImage(image, dx, dy);

// サイズを指定した画像の組み込み
	drawImage(image, dx, dy, dw, dh);

// 画像をトリミングして組み込み
	drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);

// 画像の読み込み
	var img = new Image();	// Imageオブジェクトの生成
	img.src = "image.gif";	// 画像の読み込み

また、以下の1番のように画像を組み込むと、文法的には問題はありませんが、ブラウザ側でJavaScriptのエラーが発生し、数回更新しなければブラウザにロードされず、画像が表示されません。この問題を回避するためには2番の方法を用いるのですが、詳しい事はこちらを参照して下さい。

// 1番:問題がある例
	var img = new Image();
	img.src = "image.gif";
	cx.drawImage(img, 0, 0);

// 2番:問題を改善した例
	var img = new Image();
	img src = "image.gif?" + new Date().getTime();
	img.onload function(){
		cx.drawImage(img, 0, 0);
	}
	

サンプル

サンプルでは、まず左上に単純に画像を表示するものを示しています。右上にはサイズを(dw, dh)で指定して表示しています。左下は元の画像の一部をトリミングして表示しています。

右下の画像はclipメソッドを用いて、画像の一部を丸い形で表示しています。このclipメソッドを用いると、それまでのパスが自動的に閉じられ、その中身が窓のようになると考えれば良いでしょう。そしてその窓の奥に画像を配置して、ブラウザからは窓を覗いている、というようなイメージです。サンプルでは分かりやすく言えば、丸い窓の奥に画像を配置して、覗きこんでいる感じです。

// 画像の読み込み
	var img = new Image();
	img.src = "img/hato_001.jpg?" + new Date().getTime();

	img.onload = function() {

// 画像を表示(左上)
		cx.drawImage(img, 10, 10);

// 画像のサイズを指定して表示(右上)
		cx.drawImage(img, 170, 30, 80, 120);

// 画像をトリミングして表示(左下)
		cx.drawImage(img, 40, 50, 30, 30, 50, 200, 30, 30);

// クリッピング領域を生成し、その中に画像を表示
		cx.beginPath();
		cx.arc(220, 220, 30, 0, Math.PI * 2, false);
		cx.clip();
		cx.drawImage(img, 165, 150);
	}