在Web開發中,圖像處理是非常常見的需求,比如生成縮略圖、打水印、自動調整色調等等。而在某些場景下,比如個性化頭像、藝術效果製作,我們需要根據不同的輸入動態生成調色板,並應用到圖片中。
本文將教你如何使用PHP編寫一個支持的圖像處理腳本。
要處理圖像,PHP中最常用的庫是GD庫( GD extension),在開始之前,請確認你的PHP環境已安裝並啟用了GD擴展:
php -m | grep gd
如果未安裝,可以通過類似以下方式安裝(以Ubuntu為例):
sudo apt-get install php-gd
sudo service apache2 restart
接收參數(比如顏色、圖片尺寸、調色模式)
根據參數生成一套動態調色板
創建畫布
根據調色板繪製圖像
輸出或保存圖像
下面是一個完整的示例,支持動態調色板和簡單渲染效果:
<?php
// 設置響應頭
header('Content-Type: image/png');
// 定義調色板生成函數
function generatePalette($baseColor, $count = 5) {
$palette = [];
list($r, $g, $b) = sscanf($baseColor, "#%02x%02x%02x");
for ($i = 0; $i < $count; $i++) {
$factor = 1 - ($i * 0.15);
$palette[] = sprintf("#%02x%02x%02x",
max(0, min(255, $r * $factor)),
max(0, min(255, $g * $factor)),
max(0, min(255, $b * $factor))
);
}
return $palette;
}
// 從GET參數讀取基礎顏色
$baseColor = isset($_GET['color']) ? $_GET['color'] : '#3498db';
// 生成調色板
$palette = generatePalette($baseColor);
// 創建畫布
$width = 500;
$height = 100;
$image = imagecreatetruecolor($width, $height);
// 填充背景
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
// 畫出調色條
$segmentWidth = $width / count($palette);
foreach ($palette as $index => $hex) {
list($r, $g, $b) = sscanf($hex, "#%02x%02x%02x");
$color = imagecolorallocate($image, $r, $g, $b);
imagefilledrectangle(
$image,
$index * $segmentWidth,
0,
($index + 1) * $segmentWidth,
$height,
$color
);
}
// 可選:在圖上標註顏色代碼
foreach ($palette as $index => $hex) {
$textColor = imagecolorallocate($image, 0, 0, 0);
imagestring(
$image,
3,
$index * $segmentWidth + 10,
$height / 2 - 7,
$hex,
$textColor
);
}
// 輸出圖像
imagepng($image);
imagedestroy($image);
?>
如果你將上面的代碼保存為palette.php ,可以通過以下方式訪問:
https://m66.net/palette.php?color=%23e74c3c
這會以紅色( #e74c3c )為基礎生成一個調色板並返回圖像。
由於輸出的是圖片內容,腳本中不能有任何HTML或空格輸出,否則圖像會損壞。
調色板數量可以根據需要靈活調整。
更複雜的應用場景可以添加漸變、隨機色彩、不同色系搭配等高級功能。
通過本篇文章,我們了解瞭如何使用PHP動態生成調色板並渲染為圖像。這個小技巧可以靈活應用到多種場景中,比如頭像生成器、遊戲皮膚配置、主題色預覽等。
未來你還可以基於此進一步擴展,例如結合色彩理論生成更協調的調色板,或者結合AI生成個性化配色方案。