php水印实现
PHP 图片水印实现方法
使用 GD 库添加文字水印
安装 GD 库后,通过 imagettftext 函数实现文字水印。示例代码:
$image = imagecreatefromjpeg('source.jpg');
$color = imagecolorallocate($image, 255, 255, 255);
$font = 'arial.ttf';
imagettftext($image, 20, 0, 50, 50, $color, $font, 'Watermark Text');
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
使用 GD 库添加图片水印
通过 imagecopy 或 imagecopymerge 合并水印图片:
$source = imagecreatefromjpeg('source.jpg');
$watermark = imagecreatefrompng('watermark.png');
imagecopymerge(
$source, $watermark,
imagesx($source) - imagesx($watermark) - 10,
imagesy($source) - imagesy($watermark) - 10,
0, 0,
imagesx($watermark), imagesy($watermark),
50
);
header('Content-Type: image/jpeg');
imagejpeg($source);
imagedestroy($source);
imagedestroy($watermark);
使用 Imagick 扩展

Imagick 提供更强大的图像处理能力:
$image = new Imagick('source.jpg');
$watermark = new Imagick();
$watermark->newImage(200, 100, new ImagickPixel('transparent'));
$draw = new ImagickDraw();
$draw->setFontSize(30);
$draw->annotation(10, 50, 'Watermark');
$watermark->drawImage($draw);
$image->compositeImage($watermark, Imagick::COMPOSITE_OVER, 10, 10);
header('Content-Type: image/jpeg');
echo $image;
水印透明度控制
GD 库通过 imagecopymerge 的最后一个参数(0-100)控制透明度,Imagick 通过 setImageOpacity 方法:

$watermark->setImageOpacity(0.5);
批量处理目录图片
遍历目录并应用水印:
$files = glob('images/*.{jpg,png}', GLOB_BRACE);
foreach ($files as $file) {
$image = imagecreatefromjpeg($file);
// 添加水印操作
imagejpeg($image, 'watermarked/' . basename($file));
imagedestroy($image);
}
注意事项
- 确保服务器已安装 GD 或 Imagick 扩展
- 字体文件路径需正确
- 处理前检查文件权限
- 大图片处理需考虑内存限制
以上方法可根据实际需求调整水印位置、大小、透明度等参数。对于生产环境,建议添加错误处理机制并考虑性能优化。






