JavaScriptを使って、文字や画像の描画
こんにちはあっくんです。AzuさんのJavascript Primerという実用書を寝る前に読んでいます。Javascript Primerは論理的に書かれていてすごいわかりやすいです。
今回はJavaScriptを使って、文字や画像の描画をやっていきましょう。
文字列の描画
2Dコンテクストで文字の描画をします。
文字列描画用の設定のプロパティ
.font
“bold 14px ‘MS 明朝'”のようにスタイル、サイズ、種類を調整します。
.textAlign
横方向の揃え位置を指定。start(初期値)、end、left、right、centerを指定可能。
.textBaseline
縦方向の揃え位置を指定。top、hanging、middle、alphabetic(初期値)、ideographic(漢字などの下端)、bottomを指定可能。
文字列描画のメソッド
.fillText(t, x, y[, m])
文字列tを、座標x,yに塗りつぶし描画。最大横幅mも指定可能。
.strokeText(t, x, y[,m])
文字列tを、座標x,yに線描画。最大横幅mも指定可能。
measureText(t).width
現在の設定で文字列tを描画した時の横幅を得ます。
例、左側は横位置の設定違いを順に描画、右側は縦位置の設定違いを順に描画します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style>
canvas {
background: url(./img/スプーンアイコン.png);
background-size: 1%;
border: solid 1px #888;
}
</style>
</head>
<body>
<canvas id="canvas" width="600" height="350"></canvas>
<script>
// Canvasを選択して、2次元コンテクストを取り出す
const canvas = document.querySelector("#canvas");
const context = canvas.getContext("2d"); // 横幅、高さ行の高さ
const w = canvas.width;
const h = canvas.height;
const lnH = 60;
// 線描画で罫線を作る
context.fillRect(150, 0, 1, h); //縦線
context.fillRect(450, 0, 1, h); //縦線
for (let y = lnH / 2; y <= h; y += lnH) {
context.fillRect(0, y, w, 1); //横線
}
// 設定をおこなう
context.fillStyle = "#ccc";
context.strokeStyle = "#000";
context.lineWidth = 2;
context.font = "bold 32px sans-serif";
const t = "ftjyあ龍";
// 左側横位置変更
["start", "end", "left", "right", "center"].forEach((align, i) => {
// 設定を行う
context.textAlign = align;
context.textBaseline = "middle";
// 文字列描画
context.fillText(t, 150, lnH * (i + 0.5));
context.strokeText(t, 150, lnH * (i + 0.5));
});
// 右側縦位置変更
[
"top",
"hanging",
"middle",
"alphabetic",
"ideographic",
"bottom",
].forEach((baseline, i) => {
// 設定を行う
context.textAlgin = "center";
context.textBaseline = baseline;
// 文字列描画
context.fillText(t, 450, lnH * (i + 0.5));
context.strokeText(t, 450, lnH * (i + 0.5));
});
</script>
</body>
</html>
Code language: HTML, XML (xml)
画像の描画
2dコンテクストで画像の描画で主に使うのは次の3種類あります。
- imgタグで読み込んだ画像。
- imgオブジェクトで読み込んだ画像。
- 他のCanvas。
画像描画のメソッド
.drawImage(i, dx, dy)
画像iを、座標dx,dyに描画。
.drawImage(i, dx, dy, dw, dh)
画像iを、座標dx, dyに、横幅dw,高さdhで描画。
.drawImage(i, sx, sy, sw, sh, dx, dy, dw, dh)
画像iを、座標sx, sy,横幅sw,高さshの領域を、座標dx,dyに、横幅dw、高さdhで描画。
画像の読み込みは非同期処理です。JavaScriptのImageオブジェクトを使います。
構文
変数= new Image()
変数.onload = 関数
変数.src = URLの文字列
Code language: JavaScript (javascript)
例、画像の一部を描画します。
画像
画像の一部の描画。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style>
canvas {
/* 背景にスプーンのアイコンを使用 */
background: url(./img/スプーンアイコン.png);
background-size: 1%;
border: solid 1px #888;
}
</style>
</head>
<body>
<canvas id="canvas" width="400" height="300"></canvas>
<script>
// Canvasを選択して、2次元コンテクストを取り出す
const canvas = document.querySelector("#canvas");
const context = canvas.getContext("2d");
// Imageオブジェクト
const img = new Image();
// 読み込み完了時の処理を登録
img.onload = function () {
// 画像を描画
context.drawImage(img, 60, 150, 750, 500, 25, 25, 750, 600);
};
// 画像を読み込む
img.src = "./img/pancake.png";
</script>
</body>
</html>
Code language: HTML, XML (xml)
読んでいただいてありがとうございました! JavaScript完全入門、体系的に学べます。おすすめです。