PHPでは、 ImageFilledArc()は非常に強力な機能であり、主にアークチャートを描画するために使用されます。複数のセグメントを備えた複雑な曲線チャートを表示する必要がある場合、それは間違いなく非常に便利なツールです。この記事では、ImageFilledArc()関数を使用して複数のセグメント化されたアークチャートを描画する方法を示し、簡単なコードの例を使用して、このグラフを段階的に構築する方法を理解するのに役立ちます。
ImageFilledArc()は、GDライブラリの関数であり、塗りつぶされたアークを描画するために使用されます。その基本的な構文は次のとおりです。
imagefilledarc(resource $image, int $cx, int $cy, int $width, int $height, int $start, int $end, int $color, int $style)
$画像:ターゲット画像リソース。
$ cx、$ cy :円の中心の座標。
$ width、$ height :アーク領域の幅と高さ。
$ start :アークの開始角。
$ end :アークの端角。
$色:アークの充填色。
$スタイル:アークフィルスタイル。
この機能は、特にセグメントに複数のデータ項目を表示する必要がある場合、パイチャート、円形の進行状況バー、複雑な統計チャートなどの描画に非常に適しています。
まず、アークを描く方法を示す簡単なチャートを作成しましょう。 ImageFilledarc()で0〜180度の弧を描き、色を設定します。
<?php
// 画像リソースを作成します
$image = imagecreatetruecolor(400, 400);
// 色を割り当てます
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白い背景
$arcColor = imagecolorallocate($image, 255, 0, 0); // 赤いアーク
// 背景の色を埋めます
imagefill($image, 0, 0, $bgColor);
// 弧を描きます
imagefilledarc($image, 200, 200, 300, 300, 0, 180, $arcColor, IMG_ARC_PIE);
// 出力画像
header('Content-Type: image/png');
imagepng($image);
// 無料のメモリ
imagedestroy($image);
?>
上記のコードでは、400x400の画像を作成し、白い背景を設定します。次に、赤で0〜180度の弧を描きます。
複数のセグメントの複雑なアークチャートを描くには、アークを複数のセグメントに分割する必要があります。各セグメントには、開始角と終了角が異なります。以下は、4つのセグメントを備えた円を描くより複雑な例を示します。それぞれが異なるデータ値を表します。
<?php
// 画像リソースを作成します
$image = imagecreatetruecolor(400, 400);
// 色を割り当てます
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白い背景
$colors = [
imagecolorallocate($image, 255, 0, 0), // 赤
imagecolorallocate($image, 0, 255, 0), // 緑
imagecolorallocate($image, 0, 0, 255), // 青
imagecolorallocate($image, 255, 255, 0) // 黄色
];
// 背景の色を埋めます
imagefill($image, 0, 0, $bgColor);
// データ定義(各値は、対応するセグメントの角度を表します)
$data = [40, 30, 60, 90]; // 合計です 220 度
// 各セグメントの開始角と端の角度を計算します
$startAngle = 0;
foreach ($data as $i => $value) {
$endAngle = $startAngle + $value;
imagefilledarc($image, 200, 200, 300, 300, $startAngle, $endAngle, $colors[$i], IMG_ARC_PIE);
$startAngle = $endAngle;
}
// 出力画像
header('Content-Type: image/png');
imagepng($image);
// 無料のメモリ
imagedestroy($image);
?>
この例では、配列$データの値に基づいて複数のセグメントを描画します(各値はアークの角度を表します)。各セグメントの色は、定義された色の配列の1つです。
チャートをより柔軟にするために、URLを介して異なるデータを動的にロードできます。データがURLに由来し、データがJSON形式で渡されるとします。 phpのfile_get_contents()関数を使用して、指定されたURLからデータを取得し、 json_decode()を介してPHPアレイに変換できます。簡単な例を次に示します。
<?php
// から URL 得る JSON データ
$dataUrl = 'https://m66.net/data.json'; // 假设データ存放在这个 URL
$jsonData = file_get_contents($dataUrl);
$data = json_decode($jsonData, true);
// 画像リソースを作成します
$image = imagecreatetruecolor(400, 400);
// 色を割り当てます
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白い背景
$colors = [
imagecolorallocate($image, 255, 0, 0), // 赤
imagecolorallocate($image, 0, 255, 0), // 緑
imagecolorallocate($image, 0, 0, 255), // 青
imagecolorallocate($image, 255, 255, 0) // 黄色
];
// 背景の色を埋めます
imagefill($image, 0, 0, $bgColor);
// 各セグメントの開始角と端の角度を計算します
$startAngle = 0;
foreach ($data as $i => $value) {
$endAngle = $startAngle + $value;
imagefilledarc($image, 200, 200, 300, 300, $startAngle, $endAngle, $colors[$i % count($colors)], IMG_ARC_PIE);
$startAngle = $endAngle;
}
// 出力画像
header('Content-Type: image/png');
imagepng($image);
// 無料のメモリ
imagedestroy($image);
?>
このコードでは、データがURLに保存され、JSON形式のデータがfile_get_contents()関数を介して取得され、phpアレイに解析されると想定しています。次に、これらのデータに基づいて、複数のアークセグメントが動的に描画されます。より多くのデータセグメンテーションに対処するために、色配列に簡単なループを行ったことは注目に値します。