當前位置: 首頁> 最新文章列表> imageopenpolygon() 與alpha 漸變配合實現半透明效果

imageopenpolygon() 與alpha 漸變配合實現半透明效果

M66 2025-05-29

在PHP 中使用GD 庫繪圖時,想要實現漂亮的半透明效果,通常需要結合使用alpha 通道處理。在這篇文章中,我將帶你了解如何通過imageopenpolygon()函數配合alpha 漸變,繪製出既流暢又半透明的多邊形效果。

什麼是imageopenpolygon()?

imageopenpolygon()是PHP GD 庫中的一個繪圖函數,用來在畫布上繪製開放式多邊形。與imagepolygon() (閉合多邊形)不同的是, imageopenpolygon()只繪製多邊形的線條,並不會自動閉合首尾點。

函數基本語法如下:

 bool imageopenpolygon(GdImage $image, array $points, int $num_points, int $color)
  • $image :目標圖像資源。

  • $points :包含點坐標的數組,格式為[x1, y1, x2, y2, ..., xn, yn]

  • $num_points :點的數量。

  • $color :繪圖使用的顏色。

如何添加alpha 漸變效果?

GD 庫支持RGBA 格式顏色,可以讓顏色帶有透明度(alpha)。通過控制alpha 值,就能實現漸變的透明效果。

示例代碼

下面是一個實際示例,演示如何使用imageopenpolygon()繪製帶有半透明漸變的多邊形。

 <?php
// 創建畫布
$width = 400;
$height = 400;
$image = imagecreatetruecolor($width, $height);

// 啟用 alpha 通道保存信息
imagesavealpha($image, true);

// 用透明色填充背景
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);

// 定義多邊形的點
$points = [
    50, 50,
    350, 50,
    350, 350,
    50, 350
];

// 開始繪製不同透明度的多邊形線條
$steps = 10;
for ($i = 0; $i <= $steps; $i++) {
    $alpha = (int)($i * (127 / $steps)); // alpha 從0(不透明)到127(全透明)

    $color = imagecolorallocatealpha($image, 255, 0, 0, $alpha); // 紅色,帶不同的透明度

    // 計算縮放後的點
    $scaledPoints = [];
    foreach ($points as $index => $coord) {
        $offset = 5 * $i;
        if ($index % 2 == 0) { // x 坐標
            $scaledPoints[] = $coord + $offset;
        } else { // y 坐標
            $scaledPoints[] = $coord + $offset;
        }
    }

    imageopenpolygon($image, $scaledPoints, count($scaledPoints) / 2, $color);
}

// 輸出圖片
header('Content-Type: image/png');
imagepng($image);

// 銷毀資源
imagedestroy($image);
?>

效果說明

這段代碼通過循環,每次稍微擴大多邊形並降低透明度,從而實現從中心向外發散的半透明漸變效果。由於imageopenpolygon()繪製的是開放式多邊形,所以中間不會出現實心填充,保持了非常細膩的漸變線條感。

如果你想要查看最終效果,可以將上面的代碼保存為.php文件並上傳到你的服務器,例如:

 https://m66.net/demo/transparent_polygon.php

(請記得將服務器配置好PHP 環境,並確保GD 庫已啟用。)

注意事項

  • imagesavealpha($image, true)一定要調用,否則輸出時透明信息不會被保存。

  • imagecolorallocatealpha()的最後一個參數是alpha 值,範圍是0(完全不透明)到127(完全透明)。

  • PHP 8.0 起,GD 庫的對像模型改了,注意版本差異。

總結

使用imageopenpolygon()配合alpha 漸變,其實可以非常輕鬆地實現半透明、多層次的線條繪製效果。這種技術不僅可以用於繪製炫酷的UI 組件,還可以用於生成動態背景、特效圖形等,非常實用。