紅色背景、黃色五角星,輸出 PNG 圖片。核心邏輯:利用正五邊形幾何性質計算 5 個外頂點座標,按「跳一連線」規則繪製 5 條線段形成五角星。
<?php
// 1. 畫布尺寸
$width = 500;
$height = 500;
// 2. 創建真彩色圖像資源
$im = imagecreatetruecolor($width, $height);
if (!$im) die('GD 初始化失敗,請確認 php_gd2 擴展已啟用');
// 3. 分配顏色:紅色背景、黃色星星
$red = imagecolorallocate($im, 230, 0, 0);
$yellow = imagecolorallocate($im, 255, 255, 0);
// 4. 填充背景
imagefill($im, 0, 0, $red);
/* ===== 幾何計算:正五邊形外接圓半徑 R,邊長 b =====
* 正五邊形中心角 = 72°,頂點角 = 108°
* 五角星由正五邊形 5 個頂點「隔一連線」形成
* 這裡簡化:直接用三角函數計算 5 個頂點座標
*/
$b = 100; // 正五邊形邊長(可視為外接圓半徑近似值)
$pi = M_PI / 180; // 角度轉弧度常數
// 星星中心點
$cx = 250;
$cy = 250;
// 計算 5 個頂點(從頂部頂點開始,順時針 72° 間隔)
$points = [];
for ($i = 0; $i < 5; $i++) {
// 角度:-90° 為正上方,每步 +72°
$angle = (-90 + $i * 72) * $pi;
$points[] = [
'x' => $cx + $b * cos($angle),
'y' => $cy + $b * sin($angle)
];
}
/* ===== 繪製五角星:連接頂點 0-2, 2-4, 4-1, 1-3, 3-0 =====
* 索引順序:0, 2, 4, 1, 3, 0
*/
$starOrder = [0, 2, 4, 1, 3, 0];
for ($i = 0; $i < count($starOrder) - 1; $i++) {
$p1 = $points[$starOrder[$i]];
$p2 = $points[$starOrder[$i + 1]];
imageline($im, $p1['x'], $p1['y'], $p2['x'], $p2['y'], $yellow);
}
// 5. 輸出圖片
header('Content-Type: image/png');
imagepng($im);
// 6. 銷毀資源釋放內存
imagedestroy($im);
?>
頂點 0 (頂部)
*
/ \
/ \
/ \
頂點 3 *-----* 頂點 1
\ /
\ /
\ /
頂點 4 * 頂點 2
連接順序:0 → 2 → 4 → 1 → 3 → 0
| 函數 | 用途 |
|---|---|
imagecreatetruecolor(w, h) | 創建真彩色畫布(支援 1670 萬色),必須 GD 2.0+ |
imagecolorallocate(im, r, g, b) | 分配顏色索引,返回標識符供繪圖函數使用 |
imagefill(im, x, y, color) | 從 (x,y) 開始洪水填充 |
imageline(im, x1, y1, x2, y2, color) | 畫直線段 |
imagepng(im) | 輸出 PNG 格式到瀏覽器或文件 |
imagedestroy(im) | 釋放圖像資源內存 |
imagefilledpolygon($im, $flatPoints, 5, $yellow),需將頂點展平為 [x0,y0,x1,y1,...] 陣列。imageantialias($im, true) 開啟線條抗鋸齒(僅對線條有效)。points=5, skip=2 可畫五角星、六角星等。imagettftext() 繪製 TTF 字體文字。imagepng($im, 'star.png') 保存磁盤。php -m | grep gd 檢查;docker-php-ext-install gd 或 apt-get install php-gd 安裝。header() 之前無輸出,或使用輸出緩衝 ob_start()。imagefill 後分配前景色,否則調色板索引可能衝突。