【PHP実践|実務向け】PHPのGDライブラリで動的な棒グラフを生成する手法

1. 導入

Webシステム開発において、管理画面で簡易的な売上推移やアクセス解析結果を可視化したいという要望は少なくありません。外部のJavaScriptライブラリ(Chart.jsなど)を使うのが一般的ですが、PDFレポートの生成や、クライアント側でJSを動かしたくない環境では、PHP標準の画像処理ライブラリ「GD」を用いたサーバーサイドでのグラフ生成が非常に重要になります。本稿では、GDライブラリを使って動的に棒グラフを描画するテクニックを解説します。

2. 基礎知識

GDライブラリは、PHPで画像を生成・編集するための強力な拡張モジュールです。
・imagecreate(): 指定したサイズの空のキャンバスを作成します。
・imagecolorallocate(): RGB値を指定して色を定義します。
・imagefilledrectangle(): 塗りつぶされた四角形を描画し、棒グラフのバーを表現します。
・imagettftext(): TrueTypeフォントを使用してテキストを描画します。日本語を表示する場合は、日本語対応のフォントファイル(.ttf)が必須です。

3. 実装/解決策

グラフを描画する際は、以下のステップが重要です。
1. 座標計算: グラフの原点(左下)を基準に、マージンを考慮して相対位置を算出します。
2. スケーリング: 指定された最大値(max)に対して、実際の画像上の高さ(height)を比率計算で変換します。
3. フォントの配置: テキストの幅を`imagettfbbox`で計測し、中央揃えを維持するように配置します。

4. サンプルプログラム

以下は、配列データを元に棒グラフを生成する実用的なコードです。

$val) {
$x1 = $margin + ($i ($bar_width + 20)) + 20;
$y1 = $height + $margin; // 下端
$x2 = $x1 + $bar_width;
$y2 = $y1 – ($val / $max $height); // データに基づいた高さ

// 棒の描画
imagefilledrectangle($image, $x1, $y1, $x2, $y2, $bar_color);

// ラベルの描画
imagettftext($image, 12, 0, $x1, $y1 + 25, $text_color, $font, $labels[$i]);
}

// 出力
header(“Content-type: image/png”);
imagepng($image);
imagedestroy($image);
?>

5. 応用・注意点

・メモリ制限: 大きな画像を生成する場合、PHPの`memory_limit`に達することがあります。必要に応じて`ini_set(‘memory_limit’, ‘256M’);`などで調整してください。
・アンチエイリアス: GDで斜め線や曲線を綺麗に描くには、`imageantialias($image, true);`を有効にするのが一般的ですが、四角形の描画には影響しません。
・フォントのパス: サーバー環境によってフォントの配置場所が異なります。相対パスで指定し、ディレクトリのパーミッションを確認してください。
・バグ回避: 計算の際、ゼロ除算が発生しないよう、最大値($max)には必ず1以上の値が入るようにバリデーションを行いましょう。

タイトルとURLをコピーしました