php实现图片水印
添加文字水印
使用 imagettftext 函数在图片上添加文字水印。需要确保服务器安装了 GD 库和 FreeType 支持。
$image = imagecreatefromjpeg('original.jpg');
$color = imagecolorallocate($image, 255, 255, 255);
$font = 'arial.ttf';
imagettftext($image, 20, 0, 10, 30, $color, $font, 'Watermark Text');
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
添加图片水印
使用 imagecopy 或 imagecopymerge 函数将水印图片叠加到原图上。
$original = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');
$margin_right = 10;
$margin_bottom = 10;
$sx = imagesx($watermark);
$sy = imagesy($watermark);
imagecopy(
$original,
$watermark,
imagesx($original) - $sx - $margin_right,
imagesy($original) - $sy - $margin_bottom,
0,
0,
$sx,
$sy
);
header('Content-Type: image/jpeg');
imagejpeg($original);
imagedestroy($original);
imagedestroy($watermark);
调整水印透明度
使用 imagecopymerge 函数可以实现半透明效果,最后一个参数控制透明度(0-100)。

imagecopymerge(
$original,
$watermark,
imagesx($original) - $sx - $margin_right,
imagesy($original) - $sy - $margin_bottom,
0,
0,
$sx,
$sy,
50 // 50%透明度
);
保存水印图片
使用 imagejpeg、imagepng 或 imagegif 函数将处理后的图片保存到文件。
imagejpeg($original, 'watermarked.jpg', 90); // 90表示JPEG质量
支持多种图片格式
根据原始图片类型选择对应的创建函数:

function createImageFromFile($filename) {
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
switch($ext) {
case 'jpg':
case 'jpeg':
return imagecreatefromjpeg($filename);
case 'png':
return imagecreatefrompng($filename);
case 'gif':
return imagecreatefromgif($filename);
default:
throw new Exception('Unsupported image format');
}
}
自动调整水印位置
计算水印位置,确保不会超出图片边界:
$pos_x = min(imagesx($original) - $sx - $margin_right, $desired_x);
$pos_y = min(imagesy($original) - $sy - $margin_bottom, $desired_y);
批量添加水印
遍历目录中的所有图片文件进行处理:
$files = glob('images/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
foreach($files as $file) {
$original = createImageFromFile($file);
// 添加水印处理
imagejpeg($original, 'watermarked_'.basename($file));
imagedestroy($original);
}






