JavaScriptを使って描画するCanvasとは?

2008年5月1日(木)
羽田野 太巳

座標系

具体的なCanvasの使い方に入る前に、ここでは座標系について理解しましょう。Canvasで図を描く際、必ず「どこ」に「どんな大きさ」で「何を」描くのかをJavaScriptから命令しなければいけません。ここでは「どこ」に注目します。

Canvasでは、「どこ」を表すために座標を使います。たとえば、折れ線グラフでは左下が起点となることが多いと言えるでしょう。この起点の座標は(0,0)です。そして右方向へx軸が延び、右へ向かうほどx座標の値が大きくなっていきます。そして、上方向へy軸が延び、上へ向かうほどy座標の値が大きくなっていきます。

ところが、Canvasでは若干異なります。まず起点は左上です。x座標は右へ向かうほど大きくなりますが、y座標は下へ向かうほど大きくなっていきます。

Canvasで図を描く際に使う大きさや長さの単位は、基本的にはピクセルです。図3では、Canvasの幅が400ピクセル、高さが300ピクセルということになります。図を描く際には座標を指定しますが、これも起点から見たピクセル数を指定します。スタイルシートとは異なり、ピクセル以外の単位でサイズを指定することはできませんので、注意してください。

Canvasでは、先ほどのサンプルの矩形以外にも、「直線」「矩形(四角形)」「円弧」「二次曲線」「ベジェ曲線」などを描くことができます。

Canvasでは、これらの図形や線だけしか描けないわけではありません。これらの図形や線を組み合わせることも可能です。たとえば、直線を組み合わせれば星型を、直線と円弧を組み合わせれば角丸四角形が描けます。

コードの書き方

座標系を理解したところで、先ほど紹介したサンプル(リスト2)を詳しく見ていきましょう。

まず、「var canvas = document.getElementById('sample');」です。これは、canvas要素のノードオブジェクトを取り出します。サンプルのHTMLではcanvas要素のid属性をセットしてありますので、getElementByIdメソッドを使ってcanvas要素のノードオブジェクトを取り出します。

次に、「var ctx = canvas.getContext('2d');」について解説します。ここからがCanvasに踏み込んだコードになります。canvas要素のノードオブジェクトcanvasには、Canvasを使うために必要な2Dコンテキストと呼ばれるオブジェクトがセットされています。この2Dコンテキストをcanvasの要素ノードオブジェクトからgetContextメソッドを使って取り出します。この2Dコンテキストとなるctxには、Canvasで図を描くためのさまざまなメソッドやプロパティがセットされています。

getContextメソッドには引数を与えますが、HTML 5では現在のところは「2d」のみが規定されており、それ以外の引数を指定することはできません。

以降、ctxオブジェクト「ctx.strokeRect(20, 10, 260, 130);」を通して、図を描いてきます。strokeRectは、矩形を線で描くためのメソッドです。引数には、矩形の左上にあたるx座標、y座標、そして幅と高さを表す値を与えます。

fillRect「ctx.fillRect(50, 30, 200, 90);」は、矩形を塗りつぶすためのメソッドです。引数はstrokeRectと同じです。

Canvasを使ってJavaScriptからどのようにして、「どこ」に「どんな大きさ」で「何を」描くのか、イメージとして理解いただけたのではないでしょうか。最後に本記事で紹介した例のサンプルソースコードがダウンロードできますので、ぜひ試してみてください。
 →今回のサンプルコード(zip形式/15.6KB)

今回はCanvasの基礎知識を学んできましたが、Canvasを使っていろいろとおもしろいことができそうだと感じていただけたのではないでしょうか。次回は、主要な図形描画メソッドについて詳しく解説してきます。

有限会社futomi
代表取締役。CGI/Perl総合サイト「futomi\'s CGI Cafe」を運営。ホスティングサーバ(共用サーバ)でも利用できるウェブアプリケーションの独自開発・販売を手掛ける。主にPerlによるCGI制作が中心。オーダーメードのウェブアプリケーション制作/ウェブサーバ管理業務も手掛ける。http://www.futomi.com/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています