php水印实现
PHP 添加图片水印的方法
使用 imagecopy 或 imagecopymerge 函数在图片上叠加水印图片
$sourceImage = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');
$sourceWidth = imagesx($sourceImage);
$sourceHeight = imagesy($sourceImage);
$watermarkWidth = imagesx($watermark);
$watermarkHeight = imagesy($watermark);
$positionX = $sourceWidth - $watermarkWidth - 10;
$positionY = $sourceHeight - $watermarkHeight - 10;
imagecopy(
$sourceImage,
$watermark,
$positionX,
$positionY,
0,
0,
$watermarkWidth,
$watermarkHeight
);
header('Content-Type: image/jpeg');
imagejpeg($sourceImage);
imagedestroy($sourceImage);
PHP 添加文字水印的方法
使用 imagettftext 函数在图片上添加文字水印
$image = imagecreatefromjpeg('original.jpg');
$textColor = imagecolorallocate($image, 255, 255, 255);
$fontPath = 'arial.ttf';
imagettftext(
$image,
20, // 字体大小
0, // 角度
30, // X位置
50, // Y位置
$textColor,
$fontPath,
'Watermark Text'
);
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
透明水印实现方法
调整水印透明度使用 imagecopymerge 函数
$sourceImage = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');
imagecopymerge(
$sourceImage,
$watermark,
10,
10,
0,
0,
imagesx($watermark),
imagesy($watermark),
50 // 透明度 (0-100)
);
imagejpeg($sourceImage, 'watermarked.jpg');
imagedestroy($sourceImage);
批量添加水印的方法
遍历目录为多张图片添加水印
$directory = 'images/';
$files = glob($directory.'*.{jpg,jpeg,png}', GLOB_BRACE);
foreach ($files as $file) {
$image = imagecreatefromjpeg($file);
$watermark = imagecreatefrompng('watermark.png');
imagecopy(
$image,
$watermark,
imagesx($image) - imagesx($watermark) - 10,
imagesy($image) - imagesy($watermark) - 10,
0,
0,
imagesx($watermark),
imagesy($watermark)
);
imagejpeg($image, 'watermarked_'.basename($file));
imagedestroy($image);
}
水印位置计算方法
动态计算水印位置公式
// 居中水印
$positionX = (imagesx($sourceImage) - imagesx($watermark)) / 2;
$positionY = (imagesy($sourceImage) - imagesy($watermark)) / 2;
// 九宫格位置计算
$positions = [
'top-left' => [10, 10],
'top-center' => [(imagesx($sourceImage) - imagesx($watermark)) / 2, 10],
'top-right' => [imagesx($sourceImage) - imagesx($watermark) - 10, 10],
// 其他位置类似计算
];






