キャンバスサイズに基づいてHTML5 Canvasのフォントサイズをスケーリングする方法
キャンバスサイズに基づいてフォントをスケーリングする方法
HTML5のCanvasでは、キャンバスの幅が変わってもテキストの見た目のバランスを保つために、フォントサイズをキャンバスサイズに比例させて拡大・縮小すると便利です。ここでは、その基本的な考え方と具体的な実装例を紹介します。
基本となる例
たとえば、幅800pxのキャンバスに対してフォントサイズ60pxを使用するケースを考えてみましょう。
Canvas: 800px フォントサイズ: 60px
比率を使ったフォントサイズの計算
フォントサイズをキャンバスの幅に応じてスケールさせるには、まず「基準となるキャンバス幅に対するフォントサイズの比率」を求め、それを実際のキャンバス幅に掛け合わせます。次のコードで実現できます。
var fontBase = 800; // 基準となるキャンバスの幅
var fontSize = 60; // 基準となるフォントサイズ
function getFont() {
var ratio = fontSize / fontBase; // 比率を計算(60 / 800 = 0.075)
var cSize = canvas.width * ratio; // 実際のキャンバス幅に比率を掛ける
return (cSize | 0) + 'px sans-serif'; // 整数に丸めてフォント指定文字列として返す
}コードのポイント
- ratio(比率): 基準フォントサイズを基準キャンバス幅で割ることで、1pxあたりのフォントサイズの割合を求めます。
- cSize: 現在のcanvas.widthに比率を掛けることで、キャンバスの幅がどのサイズでも常に同じ相対的な文字の大きさを維持できます。
- (cSize | 0): ビット演算子「|」を利用して小数点以下を切り捨て、整数値に整えています。
実際の使用例
ctx.font = getFont();
ctx.fillText('Hello, Canvas!', 50, 100);このようにgetFont()関数を活用すれば、キャンバスのサイズが変化しても、テキストは常に一定のバランスで描画されます。レスポンシブ対応のCanvasアプリケーションや、ウィンドウリサイズに追従する描画処理を実装する際に、ぜひ役立ててください。
-
HTML5 Canvasの変換(トランスフォーム)基本解説
HTML5のCanvas APIには、変換行列(transformation matrix)を直接操作できるメソッドが用意されています。変換行列は初期状態で単位変換(identity transform)となっており、その後、各種の変換メソッドを呼び出すことで自由に調整できます。 主な変換メソッド translate(x, y):座標原点を指定した位置へ移動します。 rotate(angle):指定した角度(ラジアン)だけ描画内容を回転させます。 scale(x, y):横方向・縦方向に拡大・縮小します。 transform(a, b, c, d, e, f):現在の変換行列に、指定した行列
-
HTML5キャンバスのctx.fillText()は改行に対応していない!複数行テキストを描画する方法
fillText()メソッドは、キャンバス上に塗りつぶしテキストを描画するためのAPIです。しかし、このメソッドには改行文字(\n)を自動的に処理する機能がなく、改行を含む文字列をそのまま渡すと、すべてが1行のテキストとして描画されてしまいます。 fillText()で改行を実現する基本手法 改行されたテキストを描画したい場合は、文字列を改行文字の位置で分割し、fillText()を複数回呼び出して各行を個別に描画する必要があります。具体的には、split(\n)で文字列を行ごとの配列に変換し、ループ処理の中でY座標を行間分だけずらしながら1行ずつ描いていきます。 以下のコード例で実際の動作を