PHP 的 GD 庫提供了強大的圖形處理能力,其中 imagetypes()、imagecreatetruecolor() 和 imagecreate() 是最基礎也最常用的函數。本文將詳細解析這些函數的用法、差異及實際應用場景。
imagetypes() 函數以位元欄位方式返回當前 PHP 版本關聯的 GD 庫所支援的圖像格式。返回值可能包含以下常數的組合:
IMG_GIF - GIF 格式支援IMG_JPG - JPEG 格式支援IMG_PNG - PNG 格式支援IMG_WBMP - WBMP 格式支援IMG_XPM - XPM 格式支援<?php
if (imagetypes() & IMG_PNG) {
echo "PNG 支援已啟用";
} else {
echo "PNG 支援未啟用";
}
?>
這兩個函數都用於建立新的圖像資源,但有關鍵差異:
| 特性 | imagecreate() | imagecreatetruecolor() |
|---|---|---|
| 色彩模式 | 調色盤模式 (256 色) | 真彩色模式 (1670 萬色) |
| 圖像品質 | 較低,適合簡單圖形 | 高品質,支援透明度與漸層 |
| 記憶體佔用 | 較小 | 較大 |
| 推薦用途 | 舊版相容、簡單圖表 | 現代應用、照片處理、複雜繪圖 |
<?php
$img = imagecreatetruecolor(300, 200);
echo "圖像寬度: " . imagesx($img); // 輸出: 300
?>
<?php
// 建立 100x30 的調色盤模式圖像
$im = imagecreate(100, 30);
// 分配顏色:白色背景、藍色文字
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);
// 繪製文字
imagestring($im, 5, 0, 0, "Hello World!", $textcolor);
// 輸出為 PNG
header("Content-Type: image/png");
imagepng($im);
imagedestroy($im);
?>
真彩色模式支援完整的 Alpha 通道透明度,這是調色盤模式無法實現的:
<?php
$png = imagecreatetruecolor(800, 600);
// 啟用 Alpha 通道儲存
imagesavealpha($png, true);
// 分配全透明顏色 (Alpha=127 為完全透明)
$trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127);
// 填充透明背景
imagefill($png, 0, 0, $trans_colour);
// 繪製紅色實心橢圓
$red = imagecolorallocate($png, 255, 0, 0);
imagefilledellipse($png, 400, 300, 400, 300, $red);
// 輸出
header("Content-Type: image/png");
imagepng($png);
imagedestroy($png);
?>
imagecreatetruecolor():現代 PHP 應用幾乎總是需要真彩色支援imagetypes() 檢測:在依賴特定格式前先確認支援情況imagedestroy() 避免記憶體洩漏imagesavealpha() 和 imagecolorallocatealpha() 使用掌握這些核心函數,是 PHP 圖形處理開發的基石。無論是產生驗證碼、圖表、水印還是圖片縮圖,都離不開這些基礎操作。