在 Web 開發中,動態為圖片添加漸變透明度是常見需求(如圖片水印、疊加層、視覺特效)。本文提供一個使用 PHP GD 庫實作「從左到右透明度漸變」的完整範例。
<?php
// 1. 載入 JPEG 圖片
$imgSrc = imagecreatefromjpeg("5307754.jpg");
$imgW = imagesx($imgSrc);
$imgH = imagesy($imgSrc);
// 2. 設定漸變區域參數
$width = 30; // 漸變區域高度
$x1 = 2; // 起始 X
$x2 = $imgW - $x1 - 20; // 結束 X
$y1 = ($imgH - $width) - 2; // 起始 Y(底部上方)
$y2 = $y1 + $width; // 結束 Y
$steps = $x2 - $x1; // 總步數 = 寬度
// 3. 逐像素繪製漸變矩形
for ($i = 0; $i < $steps; $i++) {
// 計算 Alpha 值:0(不透明) ~ 127(完全透明)
$alphaX = round($i / ($steps / 127)) + 60;
if ($alphaX >= 128) $alphaX = 127; // 限制上限
// 建立白色+透明度顏色
$alphaColor = imagecolorallocatealpha($imgSrc, 255, 255, 255, $alphaX);
// 畫 1px 寬的垂直矩形
imagefilledrectangle(
$imgSrc,
$i + $x1, $y1,
$i + $x1 + 1, $y2,
$alphaColor
);
}
// 4. 輸出圖片
header('Content-Type: image/jpeg');
imagejpeg($imgSrc);
imagedestroy($imgSrc);
?>
| 函數/參數 | 說明 |
|---|---|
imagecolorallocatealpha() |
建立含 Alpha 通道的顏色,第 5 參數 0=不透明,127=全透明 |
imagefilledrectangle() |
繪製實心矩形,這裡用 1px 寬度模擬漸變 |
$steps |
漸變總步數,等於水平像素數,每步 Alpha 遞增 |
round($i / ($steps / 127)) + 60 |
線性插值公式:將 0~$steps 映射到 60~127(可調整起始透明度) |
imagefilter() 內建濾鏡imagecreatefrompng() + imagepng() 保留原有透明通道