首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP GD 庫繪製五星紅旗完整教學

     編輯:PHP 綜合知識

GD 庫繪圖基礎流程

  1. 建立畫布:imagecreatetruecolor()
  2. 分配顏色:imagecolorallocate()
  3. 填充背景:imagefill()
  4. 繪製形狀:imagefilledpolygon()、imageellipse() 等
  5. 輸出圖片:imagejpeg()/imagepng()
  6. 釋放資源: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()

擴充應用

  • 動態生成各國國旗(參數化幾何規則)
  • 加入文字水印、邊框、漸層效果
  • 輸出 PNG 保留透明背景
  • 結合 imagettftext() 繪製中文說明

GD 庫雖功能基礎,但掌握座標幾何與色彩模型,即可實作豐富的動態圖片生成功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved