PHP使用GD库给图片添加文字水印
本文讲解如何通过 PHP 的 GD 扩展为图片添加自定义文字水印,涵盖字体设置、位置定位及格式处理。
实现原理与准备
PHP 通过内置的 GD 库提供了强大的图像处理能力。实现文字水印的核心在于读取现有图像数据,在内存中创建画布,计算文字坐标,将文字渲染到画布上,并根据原始图片的格式输出新图像。操作前需确保服务器环境已启用 gd 扩展,且系统可读写字体的 .ttf 文件。
核心操作步骤
第1步:加载源图像
目的:获取图像数据以便后续修改。
- 入口:获取图像的路径或字符串流。
- 动作:使用
imagecreatefromstring(file_get_contents($path))从文件内容创建图像资源。 - 注意:此函数自动识别 JPEG、PNG、GIF 等支持格式。
第2步:配置字体与颜色参数
目的:定义水印文字的样式和可见性。
- 字体文件:指定
.ttf字体的本地路径(如'./font.ttf')。 - 颜色分配:使用
imagecolorallocate($img, R, G, B)创建颜色标识符。例如黑色为imagecolorallocate($dst, 0, 0, 0)。
第3步:绘制文字水印
目的:将文字叠加到图像指定位置。
- 关键函数:
imagefttext(),这是支持 TrueType 字体的绘图函数。 - 参数说明:
- $img: 目标图像资源。
- $size: 字体大小(像素)。
- $angle: 旋转角度(0度为水平从左到右)。
- $x, $y: 文字基线起始点的 X 和 Y 坐标。
- $color: 文字颜色资源。
- $fontfile: 字体文件路径。
- $text: 要显示的水印文本。
第4步:检测格式并输出图像
目的:确保输出图像的 MIME 类型正确,保持与原图一致或符合需求。
- 获取信息:使用
list($width, $height, $type)和getimagesize($path)解析图像属性。 - 条件输出:
- GIF (
case 1): 调用imagegif($img)。 - JPG (
case 2): 调用imagejpeg($img)。 - PNG (
case 3): 调用imagepng($img)。
第5步:资源清理
目的:防止内存泄漏。
- 动作:处理完成后必须调用
imagedestroy($img)释放图像资源。
完整代码示例
<?php
/* 定义源图像路径 */
$dst_path = 'http://example.com/sample.jpg';
/* 1. 从字符串中的图像流新建一个图像 */
$dst = imagecreatefromstring(file_get_contents($dst_path));
/* 2. 设置字体与颜色 */
$font = './arial.ttf'; // 请确保该字体文件存在
$black = imagecolorallocate($dst, 0, 0, 0);
/*
* 3. 绘制文字水印
* imagefttext($img, $size, $angle, $x, $y, $color, $fontfile, $text)
* $x=10, $y=30 表示文字左下角相对于画布左上角的偏移
*/
imagefttext($dst, 20, 0, 10, 30, $black, $font, 'Hello world!');
/* 4. 获取原图尺寸与类型以匹配输出 */
list($dst_w,$dst_h,$dst_type) = getimagesize($dst_path);
switch($dst_type){
case 1: // GIF
header("Content-Type: image/gif");
imagegif($dst);
break;
case 2: // JPG
header("Content-Type: image/jpeg");
imagejpeg($dst);
break;
case 3: // PNG
header("Content-Type: image/png");
imagepng($dst);
break;
}
/* 5. 销毁图像资源 */
imagedestroy($dst);
?>
总结
上述步骤展示了如何高效地使用 PHP 原生函数完成加水印任务。关键在于准确传递坐标参数以及正确处理不同图像类型的输出头信息。以上就是PHP给图片加文字水印的详细内容,更多关于PHP图像处理及GD库应用的相关资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









