當前位置: 首頁> 最新文章列表> 如何使用imagefilledarc 繪製多個分段的複雜弧形圖表?圖形可視化一步到位

如何使用imagefilledarc 繪製多個分段的複雜弧形圖表?圖形可視化一步到位

M66 2025-06-12

在PHP 中, imagefilledarc()是一個非常強大的函數,主要用於繪製弧形圖表。當你需要展示一個多分段的複雜弧形圖表時,它無疑是一項非常有用的工具。本文將向你展示如何使用imagefilledarc()函數來繪製多個分段的弧形圖表,並通過簡單的代碼示例,幫助你一步步理解如何構建這個圖形。

1. imagefilledarc() 函數介紹

imagefilledarc()是GD 庫中的一個函數,它用來繪製一個填充的弧形。它的基本語法如下:

 imagefilledarc(resource $image, int $cx, int $cy, int $width, int $height, int $start, int $end, int $color, int $style)
  • $image :目標圖像資源。

  • $cx, $cy :圓心的坐標。

  • $width, $ height :弧形區域的寬度和高度。

  • $start :弧形的起始角度。

  • $end :弧形的結束角度。

  • $color :弧形的填充顏色。

  • $style :弧形的填充樣式。

這個函數非常適合用於繪製餅圖、圓形進度條、複雜的統計圖表等,尤其是在需要分段顯示多個數據項時。

2. 創建一個基本的圖表

首先,讓我們來創建一個簡單的圖表,展示如何繪製一個弧形。我們將用imagefilledarc()繪製一個從0180度的弧形,並為其設置顏色。

 <?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 的圖像,並設置了白色的背景。然後,我們用紅色繪製了一個從0180度的弧形。

3. 繪製多個分段的弧形圖表

要繪製多個分段的複雜弧形圖表,我們需要將弧形分割成多個段,每個段的起始和結束角度都不同。以下是一個更複雜的示例,我們將繪製一個包含四個分段的圓形,每個分段代表不同的數據值。

 <?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);
?>

在這個例子中,我們根據數組$data中的值(每個值表示弧形的角度)繪製了多個分段。每個分段的顏色是預先定義好的顏色數組中的一個。

4. 通過URL 動態加載數據

為了使得圖表更加靈活,我們可以通過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 數組。然後根據這些數據動態繪製多個弧形段。值得注意的是,我們對顏色數組做了一個簡單的循環,以應對更多的數據分段。