在PHP 中使用GD 庫繪圖時,想要實現漂亮的半透明效果,通常需要結合使用alpha 通道處理。在這篇文章中,我將帶你了解如何通過imageopenpolygon()函數配合alpha 漸變,繪製出既流暢又半透明的多邊形效果。
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 :繪圖使用的顏色。
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 組件,還可以用於生成動態背景、特效圖形等,非常實用。