版權保護的核心手段是給圖片添加水印。GD imagecopy() 可將水印圖片像素級拷貝到目標圖片指定座標。本文實現隨機位置水印,附完整代碼。
function watermark($backgroundFile, $watermarkFile) {
// 1. 獲取尺寸
list($bgW, $bgH) = getimagesize($backgroundFile);
list($wmW, $wmH) = getimagesize($watermarkFile);
// 2. 隨機位置(確保水印完整在畫布內)
$posX = rand(0, $bgW - $wmW);
$posY = rand(0, $bgH - $wmH);
// 3. 創建資源
$bg = imagecreatefromjpeg($backgroundFile); // 假設背景為 JPEG
$wm = imagecreatefromgif($watermarkFile); // 假設水印為 GIF(支持透明)
// 4. 疊加:imagecopy(dst, src, dst_x, dst_y, src_x, src_y, src_w, src_h)
imagecopy($bg, $wm, $posX, $posY, 0, 0, $wmW, $wmH);
// 5. 保存覆蓋
imagejpeg($bg, $backgroundFile);
imagedestroy($bg);
imagedestroy($wm);
}
watermark("brophp.jpg", "logo.gif");
getimagesize() 獲取 MIME,動態選擇 imagecreatefromjpeg/png/gif 及輸出函數。imagecopymerge($bg, $wm, $x, $y, 0, 0, $wmW, $wmH, $opacity),$opacity 0-100。imagecopy。imagettftext() 繪制 TTF 字體文字,支持旋轉、陰影。大流量場景下,避免實時處理。採用「上傳時異步生成帶水印版本 + CDN 緩存」架構,讀取時直接命中靜態文件。