在現代Web開發中,圖片處理是一個常見的需求。有時我們需要在服務器端對圖片進行一些處理,比如添加水印。本文將介紹如何通過Nginx和PHP代理的方式,在圖片請求時動態添加水印。
在開始之前,確保你已經安裝了Nginx和PHP,并且它們能夠正常工作。此外,你還需要安裝PHP的GD庫,因為我們將使用GD庫來處理圖片。
sudo apt-get install php-gd
首先,我們需要配置Nginx,使其將圖片請求轉發給PHP腳本處理。假設我們的圖片存儲在/var/www/html/images
目錄下,我們可以通過以下配置來實現:
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location ~* \.(jpg|jpeg|png|gif)$ {
try_files $uri /watermark.php?file=$uri;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
在這個配置中,我們使用了一個正則表達式來匹配圖片文件的請求。如果請求的文件存在,Nginx會直接返回該文件;如果文件不存在,Nginx會將請求轉發給watermark.php
腳本,并將圖片路徑作為參數傳遞。
接下來,我們需要編寫一個PHP腳本來處理圖片并添加水印。以下是一個簡單的watermark.php
腳本示例:
<?php
// 獲取圖片路徑
$imagePath = $_GET['file'];
// 檢查圖片是否存在
if (!file_exists($imagePath)) {
header("HTTP/1.0 404 Not Found");
exit;
}
// 獲取圖片類型
$imageType = exif_imagetype($imagePath);
// 根據圖片類型創建圖像資源
switch ($imageType) {
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($imagePath);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($imagePath);
break;
case IMAGETYPE_GIF:
$image = imagecreatefromgif($imagePath);
break;
default:
header("HTTP/1.0 400 Bad Request");
exit;
}
// 加載水印圖片
$watermark = imagecreatefrompng('/path/to/watermark.png');
// 獲取水印圖片的寬度和高度
$watermarkWidth = imagesx($watermark);
$watermarkHeight = imagesy($watermark);
// 獲取原始圖片的寬度和高度
$imageWidth = imagesx($image);
$imageHeight = imagesy($image);
// 計算水印位置(右下角)
$destX = $imageWidth - $watermarkWidth - 10;
$destY = $imageHeight - $watermarkHeight - 10;
// 將水印添加到原始圖片上
imagecopy($image, $watermark, $destX, $destY, 0, 0, $watermarkWidth, $watermarkHeight);
// 輸出圖片
header('Content-Type: image/jpeg');
imagejpeg($image);
// 釋放內存
imagedestroy($image);
imagedestroy($watermark);
?>
在這個腳本中,我們首先檢查請求的圖片是否存在。如果存在,我們根據圖片類型創建圖像資源,然后加載水印圖片并將其添加到原始圖片的右下角。最后,我們將處理后的圖片輸出到瀏覽器。
完成上述配置和腳本編寫后,你可以通過訪問http://example.com/images/example.jpg
來測試水印功能。如果一切正常,你應該能夠看到帶有水印的圖片。
通過Nginx和PHP代理的方式,我們可以輕松地在圖片請求時動態添加水印。這種方法不僅靈活,而且可以避免對原始圖片的修改,非常適合需要動態處理圖片的場景。希望本文對你有所幫助!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。