ほんっとにはじめてのHTML5とCSS3
<canvas>サンプル3

drawImage
●画像を描画する ●画像をトリミングして描画する ●画像をクリッピングする

*このページの画像は 素材辞典(株式会社データクラフト)から使用しています。著作権は株式会社データクラフトにあります。

サンプル1_画像を描画する(drawImage(image, dx, dy);)

<canvas>要素のサイズは、500×300pxです。分かりやすいようにベージュの背景にしています。
画像サイズは、280×370pxです。
このサンプル1は、<canvas>の左上(x=0, y=0 の地点)から原寸で表示しています。
キャンバスのサイズに収まらない部分は表示されずにカットされます。
(この↓場合、画像の縦が370なので、下の70pxがカットされています)

お使いのブラウザはcanvas要素に対応していないので描画できませんでした

onload = function() {
    image1();
};

function image1() {	
    var cnvs = document.getElementById('canvas1');
    var ctx = cnvs.getContext('2d');
/* 新しいImageオブジェクトを生成 */
    var img = new Image();
/* 画像が読み込まれてからcanvasへ書き出す */
    img.onload = function() {
    ctx.drawImage(img, 0, 0);
  };
/* 画像URLを指定して、画像のロードを開始する */
  img.src = "img/family.jpg";
}

サンプル2_画像をサイズ指定して描画する(drawImage(image, dx, dy, dw, dh);)

画像サイズを指定して、<canvas>のサイズ内に全体が描画するようにします。

お使いのブラウザはcanvas要素に対応していないので描画できませんでした

onload = function() {
    image2();
};

function image2() {	
    var cnvs2 = document.getElementById('canvas2');
    var ctx2 = cnvs2.getContext('2d');
    var img2 = new Image();
    img2.onload = function() {
    ctx2.drawImage(img2, 0, 0, 227, 300);
  };
  img2.src = "img/family.jpg";
}

サンプル3_画像をトリミングして描画する
(drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);)

画像をトリミングし、<canvas>の中央に描画するように指定します。

お使いのブラウザはcanvas要素に対応していないので描画できませんでした

onload = function() {
    image3();
};

function image3() {	
    var cnvs3 = document.getElementById('canvas3');
    var ctx3 = cnvs3.getContext('2d');
    var img3 = new Image();
    img3.onload = function() {
    ctx3.drawImage(img3, 20, 45, 200, 270, 150, 15, 200, 270);
    };
    img3.src = "img/family.jpg";
}

サンプル4_画像をクリッピングする(clip(); と drawImage(); )

パスで画像をクリッピング(切り抜き)します。
切り抜き用の正円の半径は90px。<canvas>要素のサイズは、130×130pxです。

お使いのブラウザはcanvas要素に対応していないので描画できませんでした

onload = function() {
    image4();
};

function image4() {	
    var cnvs4 = document.getElementById('canvas4');
    var ctx4 = cnvs4.getContext('2d');
/* 円を指定 */
    ctx4.beginPath();
    ctx4.arc(65, 65, 45, 0, Math.PI*2, false);
    ctx4.clip();
/* 画像を指定 */
    var img4 = new Image();
    img4.onload = function() {
    ctx4.drawImage(img4, 98, 187, 90, 90, 20, 20, 90, 90);
    };
    img4.src = "img/family.jpg";
}

サンプル5_クリッピングを複数並べる

トリミングした画像の横に、クリッピングした3人の顔を並べます。
<canvas>要素のサイズは、500×270pxです。

お使いのブラウザはcanvas要素に対応していないので描画できませんでした

function image5() {	
    var cnvs5 = document.getElementById('canvas5');
    var ctx5 = cnvs5.getContext('2d');
/* 画像のための onloadファンクション */
    var img5 = new Image();
    img5.onload = function() {
    /* まずトリミングした画像を描画 */
    ctx5.drawImage(img5, 20, 45, 200, 270, 0, 0, 200, 270);	
    /* 円を指定 */
    ctx5.beginPath();
    ctx5.arc(255, 135, 45, 0, Math.PI*2, false);
    ctx5.arc(350, 135, 45, 0, Math.PI*2, false);
    ctx5.arc(445, 135, 45, 0, Math.PI*2, false);
    ctx5.clip();
    /* クリッピング用の画像を描画 */
    ctx5.drawImage(img5, 37, 40, 90, 90, 210, 90, 90, 90);
    ctx5.drawImage(img5, 98, 187, 90, 90, 305, 90, 90, 90);
    ctx5.drawImage(img5, 135, 90, 90, 90, 400, 90, 90, 90);
    };
    img5.src = "img/family.jpg";
}

サンプル6_別に作ったキャンバスを drawImage(); で描画して、クリッピングを横に並べる

drawImage(); は、img要素だけでなく、canvas要素や video要素も描画できます。
ここでは、「createElement('canvas');」で canvas を別に3つ作って、
それをHTML上の canvas に横に並べて描画しました。
JavaScript は長くなるけど、座標の計算は「サンプル5」よりもこっちのほうが分かりやすいかも。
全部を描画する<canvas>要素 ↓ のサイズは、350×130pxです。

お使いのブラウザはcanvas要素に対応していないので描画できませんでした

onload = function() {
    image6();
};

function image6() {	
    var cnvs6 = document.getElementById('canvas6');
    var ctx6 = cnvs6.getContext('2d');
/* 別に作った3つのキャンバスを描画する */
	ctx6.drawImage(clp1, 20, 20);
	ctx6.drawImage(clp2, 130, 20);
	ctx6.drawImage(clp3, 240, 20);
}
// 「クリッピング1-父」のキャンバスを作成
    var clp1 = document.createElement('canvas');
    clp1.width = 90;
    clp1.height = 90;
    var cCtx1 = clp1.getContext('2d');	
    /* 円を指定 */
    cCtx1.beginPath();
    cCtx1.arc(45, 45, 45, 0, Math.PI*2, false);
    cCtx1.clip();
    /*画像を指定 */
    var image = new Image();
    image.onload = function() {
    cCtx1.drawImage(image, 37, 40, 90, 90, 0, 0, 90, 90);
    };
    image.src = "img/family.jpg";
// 「クリッピング2-息子」のキャンバスを作成
    var clp2 = document.createElement('canvas');
    clp2.width = 90;
    clp2.height = 90;
    var cCtx2 = clp2.getContext('2d');	
    /* 円を指定 */
    cCtx2.beginPath();
    cCtx2.arc(45, 45, 45, 0, Math.PI*2, false);
    cCtx2.clip();
    /*画像を指定 */
    var image = new Image();
    image.onload = function() {
    cCtx2.drawImage(image, 98, 187, 90, 90, 0, 0, 90, 90);
    };
    image.src = "img/family.jpg";
// 「クリッピング3-母」のキャンバスを作成
    var clp3 = document.createElement('canvas');
    clp3.width = 90;
    clp3.height = 90;
    var cCtx3 = clp3.getContext('2d');	
    /* 円を指定 */
    cCtx3.beginPath();
    cCtx3.arc(45, 45, 45, 0, Math.PI*2, false);
    cCtx3.clip();
    /*画像を指定 */
    var image = new Image();
    image.onload = function() {
    cCtx3.drawImage(image, 135, 90, 90, 90, 0, 0, 90, 90);
    };
    image.src = "img/family.jpg";