Plains フリーランス フロントエンドエンジニア

備忘録 2012.06.29

HTML+JavascriptでCanvasに図形描画

HTML5から追加された新機能、canvasで図形描画をするためのメソッド一覧です。

●描画メソッド一覧

window.onload = function(){
  //canvas要素のノードオブジェクト
  var canvas = document.getElementById('cv');
  //2Dコンテキスト
  var ctx = canvas.getContext('2d');

  //矩形を描く
  ctx.strokeRect(X, Y, W, H);

  //塗りつぶした矩形を描く
  ctx.fillRect(X, Y, W, H);

  //パスの定義
  ctx.beginPath();
  ctx.lineJoin = "miter"; //角の形状 miter:鋭角(default),
                            bevel:平たく, round:丸める
  ctx.miterLimit = 4;     //鋭角の度合い
  ctx.moveTo(X0, Y0);     //開始位置へ移動
  ctx.lineTo(X1, Y1);     //座標(X1,Y1)へ移動
  ctx.lineTo(X2, Y2);     //座標(X2,Y2)へ移動
  ctx.lineTo(X3, Y3);     //座標(X3,Y3)へ移動
  ctx.lineTo(X4, Y4);     //座標(X4,Y4)へ移動
  ctx.closePath();        //終点と開始点を結ぶ
  ctx.stroke();           //パス上に線を描く
  ctx.fill();             //パスの内側を塗りつぶす

  //円弧を描く
  var d0 = d0*Math.PI/180; //描画開始角度 d0
  var d1 = d1*Math.PI/180; //描画終了角度 d1
  ctx.arc(X, Y, r, d0, d1, true); //true:反時計回りで描画,
                                    false:時計回りで描画
  ctx.closePath();
  ctx.stroke();

  //ベジェ曲線を描く(1)
  ctx.beginPath();
  ctx.moveTo(X0, Y0);
  ctx.quadraticCurveTo(X1, Y1, X2, Y2);
  ctx.stroke();

  //ベジェ曲線を描く(2)
  ctx.beginPath();
  ctx.moveTo(X0, Y0);
  ctx.bezierCurveTo(X1, Y1, X2, Y2, X3, Y3);
  ctx.stroke();
  
  //直線から連なる円弧を描く
  ctx.beginPath();
  ctx.moveTo(X0, Y0);
  ctx.arcTo(X1, Y1, X2, Y2, r);
  ctx.stroke();

  //矩形部分を削除
  ctx.clearRect(x, y, w, h);

  //線の色を指定
  ctx.strokeStyle = "#ff00ff";
  ctx.strokeStyle = "red";
  ctx.strokeStyle = "rbg(255, 0, 0)";

  //線の太さを指定
  ctx.lineWidth = 10;

  //線の先端のスタイルを指定
  ctx.lineCap = "butt"; //butt:規定スタイル, round:先端を丸める,
                          square:先端を四角くする

  //塗りつぶしの色を指定
  ctx.fillStyle = "#ff00ff";
  ctx.fillStyle = "red";
  ctx.fillStyle = "rbg(255, 0, 0)";

  //半透明度を指定
  ctx.globalAlpha = 0.5;

  //塗りつぶし色と半透明度を指定
  ctx.fillStyle = "rgba(255, 0, 0, 0.5)";

  //グラデーションの定義
  var grad = ctx.createLinearGradient(X0, Y0, X1, Y1);
  grad.addcolorStop(0, "#ffff00");
  grad.addcolorStop(0.5, "#00ffff");
  grad.addcolorStop(1, "#00ff00");
  ctx.fillStyle = grad;

  //画像をロード
  var Img = new Image();
  Img.src = "xxxx.png?" + new Date().getTime();
  //画像のロードを確認して組み込み
  Img.onload = function(){
    //画像上の座標(SX,SY)から幅TW,高さTHをトリミングして、
    //canvas上の座標(DX,DY)に幅DW,高さDHで組み込む
    ctx.drawImage(Img, SX, SY, TW, TH, DX, DY, DW, DY);
  }

}

onloadイベントはjQueryの$.load(function(){…});を使ってよいでしょう。

Go to Top