canvasの図形描画を色々試してみました。
処理記述前の準備
canvasを記述していくための準備です。
HTML
<canvas id="canvas" width="500" height="500"></canvas>
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); // ここに描画処理を記述 }
getContext(‘2d’); | canvasに描画していくための機能を有効にする。 |
---|
四角形の描画
四角形を描画する場合は主にstrokeRect()かfillRect()を使用します。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.strokeStyle = '#ff0000'; ctx.strokeRect(10, 10, 100, 100); ctx.fillStyle = '#0000ff'; ctx.fillRect(150, 10, 100, 100); ctx.clearRect(170, 30, 40, 40); }
strokeRect(X, Y, width, height); | 枠線でくりぬかれた四角形を描画。 X,Yが四角形の左上の座標、widthとheightが四角形のサイズを指定。 |
---|---|
fillRect(X, Y, width, height); | 塗りつぶした四角形を描画。 X,Yが四角形の左上の座標、widthとheightが四角形のサイズを指定。 |
clearRect(X, Y, width, height); | 指定したエリアを削除。 X,Yが四角形の左上の座標、widthとheightが四角形のサイズを指定。 |
strokeStyle = color; | 線の色を指定。 |
fillStyle = color; | 塗りの色を指定。 |
パスの描画
パスを描画する場合、beginPath()でパスの記述開始を宣言して、moveTo()で開始座標を指定、lineTo()でパスを描画していきます。
パスの描画が終わったら今回はfill()でパスの中を塗りつぶします。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(50, 50); ctx.lineTo(100, 50); ctx.arcTo(150, 150, 50, 100, 10); ctx.lineTo(50, 100); ctx.fill(); }
beginPath(); | パスの記述を始める宣言。 |
---|---|
moveTo(X, Y); | 座標をX,Yの位置に移動。 |
lineTo(X, Y); | 現在の座標からX,Yに向けてパスを描画。 |
arcTo(X1, Y1, X2, Y2, r); | 現在の座標からX1,Y1に向けてパスを描画して、そこからX2,Y2へ向かうように半径rの円弧を描画。 |
fill(); | パスを塗りつぶして描画。 |
上記ではパスの中を塗りつぶしましたが、今度はstroke()でパスの線を描画してみます。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(50, 50); ctx.lineTo(100, 50); ctx.arcTo(150, 150, 50, 100, 10); ctx.lineTo(50, 100); ctx.stroke(); }
stroke(); | パスの線を描画。 |
---|
パスの線を描画する際、太さや角部分の描画をどうするかなどの指定も行えます。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.lineWidth = 10; ctx.lineCap = 'round'; // butt round square ctx.moveTo(50, 50); ctx.lineTo(100, 50); ctx.arcTo(150, 150, 50, 100, 10); ctx.lineTo(50, 100); ctx.stroke(); }
lineWidth = num; | 線を描画する際の太さを指定。 |
---|---|
lineCap = ‘value‘; | 線の端の処理を指定。 butt: パス部分で終了(初期値) round: 角が丸くなる square: 線幅の半分だけ伸びる |
最後にパスを自動で閉じたい場合、closePath()を使用します。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(50, 50); ctx.lineTo(100, 50); ctx.arcTo(150, 150, 50, 100, 10); ctx.lineTo(50, 100); ctx.closePath(); ctx.stroke(); }
closePath(); | 現在のパスと開始時点のパスを繋いでパスを閉じる。 |
---|
円弧の描画
円弧を描画する場合、arc()を使用します。
今回は0度から90度までの時計回りの円弧を描画してみます。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(100, 100, 50, (0 * Math.PI / 180), (90 * Math.PI / 180), false); ctx.stroke(); }
arc(X, Y, r, start, end, anticlockwise) | X,Y座標が中心でrが半径、startからendまでの円弧を描画。 anticlockwiseで方向(反時計回りかどうか)を指定。 |
---|
JavaScript
今度は0度から90度までの反時計回りの円弧を描画してみます。
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(100, 100, 50, (0 * Math.PI / 180), (90 * Math.PI / 180), true); ctx.stroke(); }
JavaScript
今度は90度から180度までの時計回りの円弧を描画してみます。
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(100, 100, 50, (90 * Math.PI / 180), (180 * Math.PI / 180), false); ctx.stroke(); }
テキストの描画
テキストを描画する場合、fillText()やstrokeText()を使用します。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); ctx.font = 'bold 20px Verdana'; ctx.textAlign = 'left'; ctx.fillStyle = '#ff0000'; ctx.fillText('Sample Text', 50, 50); ctx.fillText('Sample Text', 50, 80, 100); ctx.textBaseline = 'middle'; ctx.fillText('Sample Text', 220, 50); ctx.strokeStyle = '#0000ff'; ctx.strokeText('Sample Text', 50, 110); }
font = ‘value‘; | フォントのスタイルを指定。 値はCSSのfontスタイルと同じ。 |
---|---|
textAlign = ‘value‘; | 文字寄せをどうするか指定。 valueの値はleft, center, right, start, endのいずれか。 |
textBaseline = ‘value‘; | 文字のベースラインを指定。 valueの値はtop, middle, bottom, hanging, alphabetic, ideographicのいずれか。 |
fillText(‘text‘, X, Y[, max-width]); | X,Y座標にtextの文字を塗りつぶして描画。 max-widthがある場合はその幅内で収まるように調整される。 |
strokeText(‘text‘, X, Y[, max-width]); | X,Y座標にtextの文字を枠線でくりぬかれた状態で描画。 max-widthがある場合はその幅内で収まるように調整される。 |
画像の描画
画像を描画する場合、drawImage()を使用します。
JavaScript
window.onload = function() { draw(); } function draw() { var canvas = document.getElementById('canvas'); if(!canvas || !canvas.getContext) return false; var ctx = canvas.getContext('2d'); var img = new Image(); img.src = '01.jpg'; img.onload = function() { ctx.drawImage(img, 50, 50); } }
drawImage(img, X, Y); | X,Y座標にimgの画像を描画。 |
---|
【参考サイト】
コメントが承認されるまで時間がかかります。