PHP图片加中文水印实现代码,如何解决中文乱码与水印位置自适应?
- 虚拟主机
- 2025-12-17
- 6
在PHP中实现图片加中文水印的功能,通常需要借助GD库或Imagick扩展,本文将分享一个基于GD库的实现方案,包括文字水印的添加、样式设置及常见问题处理,以下是详细的代码实现步骤:
确保服务器已启用GD库,可以通过phpinfo()函数检查GD Support是否为enabled,创建一个PHP文件,例如add_watermark.php,并编写以下代码:

代码说明:
- 加载图片:使用imagecreatefromjpeg加载原始图片,支持JPG、PNG等格式。
- 水印设置:通过imagettftext函数添加文字,需指定字体文件路径(如simhei.ttf),确保字体支持中文。
- 位置计算:通过imagettfbbox获取文字尺寸动态计算水印位置,避免超出图片边界。
- 颜色设置:使用imagecolorallocate定义文字颜色,RGB值可自定义。
如果需要支持透明度,可以修改字体颜色创建方式:

对于批量处理,可以封装为函数:
function addTextWatermark($sourcePath, $text, $fontPath, $fontSize, $color, $outputPath) { $image = imagecreatefromjpeg($sourcePath); $width = imagesx($image); $height = imagesy($image); $textWidth = imagettfbbox($fontSize, 0, $fontPath, $text)[2] imagettfbbox($fontSize, 0, $fontPath, $text)[0]; $x = $width $textWidth 10; $y = $height $fontSize 10; imagettftext($image, $fontSize, 0, $x, $y, $color, $fontPath, $text); imagejpeg($image, $outputPath); imagedestroy($image); }
常见问题处理:

- 中文乱码:确保字体文件正确且编码匹配,建议使用UTF8编码保存PHP文件。
- 字体路径错误:检查字体文件是否存在,可使用realpath()获取绝对路径。
- 图片不显示:确认header()函数前无输出,并检查图片路径权限。
相关问答FAQs:
Q1: 如何调整水印的倾斜角度?
A: 在imagettftext函数中,第五个参数控制角度(单位为度),将角度设为45度:imagettftext($image, $fontSize, 45, $x, $y, $fontColor, $fontPath, $watermarkText);。
Q2: 如何添加图片水印而非文字水印?
A: 使用imagecopymerge函数实现,示例代码:
$watermarkImage = imagecreatefrompng('watermark.png'); $watermarkWidth = imagesx($watermarkImage); $watermarkHeight = imagesy($watermarkImage); $x = $width $watermarkWidth 10; $y = $height $watermarkHeight 10; imagecopymerge($image, $watermarkImage, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, 50);