imagecreatetruecolor()imagecolorallocate()imagefill()imagefilledpolygon()、imageellipse() 等imagejpeg()/imagepng()imagedestroy()根據國旗法標準比例(長:寬 = 3:2),大星直徑為旗高 3/10,小星直徑為 1/10,小星中心與大星中心連線與旗桿垂直線夾角分別為 0°、9°、18°、27°(四顆小星各自一角指向大星中心)。
header('Content-Type: image/jpeg');
$width = 700;
$height = 410; // 700:410 ≈ 3:2
$img = imagecreatetruecolor($width, $height);
// 顏色分配
$red = imagecolorallocate($img, 255, 0, 0); // 中國紅 #FF0000
$yellow = imagecolorallocate($img, 237, 231, 32); // 標準黃 #EDE720
// 填充紅色背景
imagefill($img, 0, 0, $red);
// 星星座標陣列 (x1,y1, x2,y2, ... x10,y10) 共 10 個頂點(五角星外頂點+內凹點交替)
// 大星(左上區域)
$bigStar = [
90, 30, 108, 73, 157, 73, 119, 102, 135, 152,
93, 123, 52, 152, 66, 102, 29, 74, 76, 73
];
imagefilledpolygon($img, $bigStar, 10, $yellow);
// 小星 1(右上)
$small1 = [
229, 25, 229, 43, 248, 48, 229, 55, 229, 74,
217, 60, 198, 66, 210, 50, 197, 34, 218, 39
];
imagefilledpolygon($img, $small1, 10, $yellow);
// 小星 2(右中)
$small2 = [
227, 108, 227, 127, 245, 134, 228, 139, 227, 157,
215, 143, 196, 149, 208, 132, 196, 117, 215, 122
];
imagefilledpolygon($img, $small2, 10, $yellow);
// 小星 3(右下)
$small3 = [
163, 184, 163, 204, 181, 211, 163, 216, 163, 234,
152, 220, 132, 225, 144, 209, 132, 193, 151, 199
];
imagefilledpolygon($img, $small3, 10, $yellow);
// 小星 4(左下)
$small4 = [
65, 209, 65, 228, 84, 235, 65, 240, 65, 259,
54, 245, 33, 249, 46, 233, 34, 217, 53, 224
];
imagefilledpolygon($img, $small4, 10, $yellow);
// 輸出並清理
ob_clean(); // 防止前置輸出破壞圖片
imagejpeg($img, null, 90); // 品質 90
imagedestroy($img);
手動座標難以維護,建議用數學函式動態生成:
function generateStarPoints($cx, $cy, $outerR, $innerR, $startAngle = -90) {
$points = [];
for ($i = 0; $i < 10; $i++) {
$angle = deg2rad($startAngle + $i * 36);
$r = ($i % 2 === 0) ? $outerR : $innerR;
$points[] = $cx + $r * cos($angle);
$points[] = $cy + $r * sin($angle);
}
return $points;
}
// 大星:外徑 45px,內徑 18px
$bigStar = generateStarPoints(100, 100, 45, 18);
// 小星:外徑 15px,內徑 6px,角度偏移使一角指向大星中心
| 問題 | 解決 |
|---|---|
| 輸出圖片損壞/顯示亂碼 | 確保 ob_clean() 在 header() 之後、輸出前;檢查無 BOM、無多餘空白/echo |
| 顏色不正確 | 使用標準色值:紅 #FF0000、黃 #FFDE00(或 #EDE720) |
| 星星變形 | 外徑/內徑比例應約 2.5:1;頂點順序必須外-內交替 |
| 記憶體不足 | 大尺寸圖片加大 memory_limit;用完即 imagedestroy() |
imagettftext() 繪製中文說明GD 庫雖功能基礎,但掌握座標幾何與色彩模型,即可實作豐富的動態圖片生成功能。