在使用PHP 的GD 庫進行圖像處理時,有時我們需要為圖像設置透明背景,比如在生成PNG 圖片時讓背景透明,而不是填充白色或黑色。要實現這個效果,主要可以用到imagecolorallocatealpha()和imagefill()這兩個函數。
本文將詳細講解如何使用這兩個函數,並給出完整示例代碼。
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
這個函數用於為指定的圖像分配一種顏色,並設置透明度。
$red, $green, $blue :RGB 顏色值(0-255)
$alpha :透明度值(0 完全不透明,127 完全透明)
返回的值是一個顏色標識符,可以用在imagefill()等函數中。
bool imagefill ( resource $image , int $x , int $y , int $color )
這個函數用來用指定的顏色填充圖像。
$x, $y :填充起始點的坐標
$color :要使用的顏色標識符
結合imagecolorallocatealpha() ,我們可以用透明色填充整個畫布。
下面是一段完整的PHP 代碼,演示如何用GD 庫生成一個帶透明背景的200x200 PNG 圖片,並在中間畫一個紅色的圓。
<?php
// 創建一個 200x200 的真彩色圖像
$width = 200;
$height = 200;
$image = imagecreatetruecolor($width, $height);
// 關閉混色模式,啟用保存 alpha 通道信息
imagealphablending($image, false);
imagesavealpha($image, true);
// 分配一個完全透明的顏色
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
// 用透明色填充整個畫布
imagefill($image, 0, 0, $transparent);
// 分配紅色(不透明)
$red = imagecolorallocate($image, 255, 0, 0);
// 在中間畫一個紅色的圓
imagefilledellipse($image, $width / 2, $height / 2, 100, 100, $red);
// 輸出圖像為 PNG
header('Content-Type: image/png');
imagepng($image);
// 釋放內存
imagedestroy($image);
?>
1??創建圖像資源<br> 我們用imagecreatetruecolor()創建一個真彩色畫布
2??啟用透明背景
GD 默認不保存alpha 信息,需要用:
imagealphablending($image, false);
imagesavealpha($image, true);
3??分配並填充透明色<br>用imagecolorallocatealpha()創建一個完全透明的顏色(alpha=127),再用imagefill()填充整個畫布
4??繪製內容<br> 這裡我們畫了一個紅色圓,你可以換成文本、線條、圖片等
5??輸出圖像<br>用header('Content-Type: image/png')設置輸出類型,再用imagepng()輸出到瀏覽器,或傳入文件名保存到磁盤,例如
imagepng($image, '/path/to/save/output.png');
?保存到文件<br> 如果要把圖像保存到服務器,可以這樣
imagepng($image, 'https://m66.net/images/output.png');
?換成GIF
雖然GIF 也支持透明背景,但透明實現方式不同,可以用imagecolortransparent() 。
?注意權限<br> 保存到服務器目錄時,確保PHP 進程有寫入權限