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の画像を描画。 |
|---|
【参考サイト】
コメントが承認されるまで時間がかかります。