画像の組み込み
キャンバスに画像を組み込みます。必要であればサイズを指定して組み込むことができます。さらに範囲を指定してトリミングを行い、その部分を組み込むことも可能です。また、画像は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);
}