首先检查并启用php的GD库,然后使用imagecreatefromjpeg和imagecreatefrompng创建图像资源,通过imagecopy或imagecopymerge将水印图片叠加到原图右下角,或用imagettftext添加文字水印,最后输出图像并释放内存。
在PHP中为图像添加水印,通常使用GD库或ImageMagick扩展。这两种方式都能实现文字或图片水印的叠加,适用于版权保护、品牌标识等场景。下面介绍如何使用GD库完成常见的水印功能。
启用GD库支持
确保PHP环境中已启用GD库。可通过以下代码检查:
<?php if (extension_loaded('gd')) { echo "GD库已启用"; } else { echo "GD库未启用,请在php.ini中开启"; } ?>
如未启用,需在php.ini中取消注释:extension=gd。
添加图片水印
将一个Logo图片叠加到目标图像上,常用于版权保护。示例如下:
立即学习“PHP免费学习笔记(深入)”;
<?php function addWatermark($source, $watermark, $output) { // 获取原图尺寸 list($sw, $sh) = getimagesize($source); list($ww, $wh) = getimagesize($watermark); <pre class='brush:php;toolbar:false;'>// 创建图像资源 $src_img = imagecreatefromjpeg($source); $wmark = imagecreatefrompng($watermark); // 设置水印位置(右下角) $x = $sw - $ww - 10; $y = $sh - $wh - 10; // 将水印合并到原图 imagecopy($src_img, $wmark, $x, $y, 0, 0, $ww, $wh); // 输出并保存 imagejpeg($src_img, $output, 90); // 释放内存 imagedestroy($src_img); imagedestroy($wmark);
}
// 调用示例 addWatermark(‘photo.jpg’, ‘logo.png’, ‘output.jpg’); ?>
说明:
- $source:原始图片路径(JPEG格式)
- $watermark:透明PNG水印图片
- $output:输出文件路径
- imagecopy函数用于简单叠加,若需透明效果可用imagecopymerge
添加文字水印
使用TrueType字体在图像上绘制文字水印,适合动态内容标记。
<?php function addTextWatermark($source, $text, $output) { $img = imagecreatefromjpeg($source); $color = imagecolorallocate($img, 255, 255, 255); // 白色文字 $font = 'arial.ttf'; // 字体文件路径 $size = 20; <pre class='brush:php;toolbar:false;'>// 文字位置(左下角) $bbox = imagettfbbox($size, 0, $font, $text); $text_width = $bbox[4] - $bbox[0]; $text_height = $bbox[1] - $bbox[5]; $x = 10; $y = imagesy($img) - $text_height - 10; // 绘制文字 imagettftext($img, $size, 0, $x, $y, $color, $font, $text); imagejpeg($img, $output, 80); imagedestroy($img);
}
// 调用示例 addTextWatermark(‘photo.jpg’, ‘© 2025 MySite’, ‘output_text.jpg’); ?>
注意:
- 确保服务器上有指定的TTF字体文件
- imagettfbbox用于计算文字实际占用区域,避免溢出
- 颜色可用imagecolorallocate定义RGB值
常见问题处理
实际使用中可能遇到的问题及解决方法:
- 中文乱码:选择支持中文的字体(如simhei.ttf),并确保文本编码为UTF-8
- 内存不足:大图处理前可先缩放,或调高memory_limit
- 权限错误:确保PHP有读写图像文件的权限
- 格式不支持:GD对GIF/PNG透明处理较复杂,建议统一转为JPEG处理
基本上就这些。通过组合图片与文字水印,可以满足大多数web项目中的图像标记需求。关键在于合理设置位置、透明度和字体样式,使水印既清晰又不破坏原图观感。