ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

HTML5のCanvas 2DのAPIを利用して文字列を描く

HTML(ハイパー・テキスト・マークアップ言語)の最新の仕様であるHTML5にはCanvasという要素がある。この要素を利用すると、画像ファイルやFlash playerやJavaアプレットなどに頼らず、HTMLとCSSとJavaScriptだけで図形やアニメーションをウェブ・ページ上に描画することができるらしい。

必要なものはHTML5とCSSとJavaScriptに対応しているウェブ・ブラウザである。世界的に普及している主要なウェブ・ブラウザ(Google Chrome, Firefox, Opera, Safariなど)の最新版をインストールしていれば、基本的なことはできるようだ。

下準備

最初に、Canvas要素を埋め込んだHTML文書(.htmlという拡張子を持つテキストファイル)を作成した。HTMLはHTML5の仕様に則って記述した。そのファイルの内容は次のとおり。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Canvasを学ぶ</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<canvas id="canvas_letter" width="380" height="120">
あなたのブラウザはCanvas要素に対応していません。
</canvas>
<script type="text/javascript" src="canvas_letter.js"></script>
</body>
</html>

canvas要素のid属性で指定した名前はJavaScriptのソースコードから参照するために使われるもの。canvas要素のwidthとheightでCanvasの描画範囲の大きさを指定した。widthが幅でheightが高さ。script要素を記述し、そのsrc属性にJavaScriptのソースファイル名を指定した。このファイルにJavaScriptでコードを記述してこのcanvas要素を制御する。

link要素で指定したstyle.cssファイルの中身は次のとおり:

canvas {
   border:2px solid black;
}

HTML5 Canvas 2Dで文字を描画してみる

ここでは、HTML Canvas 2D ContextというAPIを利用して2次元のグラフィックスを描画してみる。そのためにまずエディタを起動し、canvas_letter.jsというファイル名でhtmlファイルと同じディレクトリに保存した。canvas_letter.jsには次のとおりにJavaScriptの構文を記述した。

var canvas = document.getElementById("canvas_letter");
var context = canvas.getContext("2d");

varは変数の宣言を示す予約語で、canvasやcontextという変数を用意した。=は代入演算子で、右辺を左辺の変数に代入する役目を果たす。構文の最後の;を忘れないこと。

ここではdocumentオブジェクトのgetElementById()というメソッドを使って先ほど指定しておいたcanvas_sample1という名のidを持った要素を取得し、それをcanvasという変数に代入した。2行目ではgetContext()メソッドを使ってCanvasRenderingContext2Dオブジェクトを得てcontextという変数に代入した。これでHTML Canvas 2D Context, Level 2のAPIを利用する準備ができた。

文字列の描画コード

HTML Canvas 2D Context, Level 2のAPIを使って文字列(テキスト)を描画するコードは下のとおり。

// canvas要素を取得
var canvas = document.getElementById("canvas_letter");
// HTML Canvas 2Dを使えるようにする
var context = canvas.getContext("2d");

// 文字列の描画

// フォントを設定
context.font = 'oblique bold 35px "MS P明朝", sans-serif';
// 枠線の色を設定
context.strokeStyle = "#000";
// 文字の水平位置を設定
context.textAlign = "start";
// 文字の垂直位置を設定
context.textBaseline = "middle";
// 枠線だけの文字を描画、(文字列, x軸, y軸, 最大幅)
context.strokeText("やあ キャンバス", 10, 30, 500);

// 塗りつぶしの色を設定
context.fillStyle = "#f0f";
// x軸方向の影を設定する
context.shadowOffsetX = 3;
// y軸方向の影を設定する
context.shadowOffsetY = 3;
// 影のぼかしのレベルを設定する
context.shadowBlur = 2;
// 影の色を設定する
context.shadowColor = "#000000";
// 塗りつぶしの文字を描画、(文字列, x軸, y軸, 最大幅)
context.fillText("今日の調子はどうだい", 5, 80, 500);

フォントの設定はCSSのfontプロパティのように設定する。左から、太字、サイズ、フォント名。水平位置はstart, end, left, right, centerから選べる。centerがデフォルト。垂直位置はtop, hanging, middle, ideographic, bottom, alphabeticの中から選べる。alphabeticがデフォルト。fillText()とstrokeText()メソッドの引数は共に("文字列", x軸, y軸, 最大幅)の順。影の設定のためのプロパティのデフォルト値はいずれも0。

結果はこのようになった。

あなたのウェブ・ブラウザは、JavaScriptが無効であるか、HTML5 Canvasに対応していません。

コードの記述の順番も重要で、影の設定は2行目の文字列「今日の調子はどうだい」にのみ反映されていた。後に描画したものが前に来て、先に描画したものが背景に来た。プロパティの値を変えたり、メソッドの引数の値を変えたり、コードの記述の順番を変えたりしていろいろ試してみると面白い。

まとめ

font
用いるフォントを指定する。
strokeStyle
線の色などのスタイルを指定する。
textAlign
文字列の水平方向の位置を指定する。"start", "end", "left", "right", "center"のうちから選択する。
textBaseline
文字列の垂直方向の位置を指定する。"top", "hanging", "middle", "alphabetic", "ideographic", "bottom"のうちから選択する。
strokeText("text", x, y, xw)
枠線だけの文字列を描く。"text"に文字列を、xとyで座標を、xwで最大の幅を指定する。xwはオプション。座標系はCanvasの左上端が(0,0)となる。
fillText("text" , x, y, xw)
塗りつぶした文字列を描く。"text"に文字列を、xとyで座標を、xwで最大の幅を指定する。xwはオプション。座標系はCanvasの左上端が(0,0)となる。
fillStyle
塗りつぶしの色などのスタイルを指定する。
shadowOffsetX
x軸方向の影の長さを指定する。
shadowOffsetY
y軸方向の影の長さを指定する。
shadowBlur
影のぼかし度を数値で指定する。
shadowColor
影の色を指定する。

コメント

このブログの人気の投稿

Visual Studio 2019にはC++のためのフォームデザイナーがない件

10の補数と9の補数と2の補数と1の補数

LATEXで数式:指数と順列などで使う添数・添字