PHP 图片加水印原理与实现:文字与图片水印代码示例

江岸
江岸
发布时间:2026-10-15| 6人浏览过
原创

在 PHP Web 开发中,为上传的图片自动添加版权标识或Logo是常见需求。利用 PHP 内置的 GD 扩展,可以通过简单的几行代码实现文字水印和图片水印的绘制。本文将拆解其背后的原理,并提供基础的代码实现。

文字水印的实现原理

文字水印的核心在于创建一个独立的画布,将文字渲染到该画布上,或者直接在目标图像上绘制文字。以下代码演示了如何创建一个包含背景色和文字的小尺寸图像资源:

$w = 80;
$h = 20;
$im = imagecreatetruecolor($w,$h);
$textcolor = imagecolorallocate($im, 123, 12, 255);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $grey); //画一矩形并填充

// 把字符串写在图像左上角
imagestring($im, 3, 2, 3, "Hello world!", $textcolor);

// 输出图像
header("Content-type: image/jpeg");
imagejpeg($im);
imagedestroy($im); // 销毁资源以节省内存
  1. 创建画布:imagecreatetruecolor 用于初始化一个真彩色图像资源,参数指定宽高。
  2. 颜色分配:imagecolorallocate 为图像定义多种颜色(如文本色、背景灰、黑、白)。
  3. 绘制背景:imagefilledrectangle 填充一个矩形区域作为水印底色。
  4. 写入文本:imagestring 使用内部字体将字符串绘制到图像指定坐标位置。
  5. 输出与清理:设置 Header 声明图片类型,imagejpeg 输出 JPEG 格式,最后必须调用 imagedestroy 释放内存。

图片水印的叠加原理

图片水印是将一个透明或有背景的 Logo/图片覆盖在原始图片的特定位置上。关键在于获取两张图片的尺寸信息,并根据原始图片的文件类型选择对应的创建函数。

$groundImg = "DSC05940.jpeg";
$groundInfo = getimagesize($groundImg);
$ground_w = $groundInfo[0];
$ground_h = $groundInfo[1];

switch($groundInfo[2]){ 
case 1:
$ground_im = imagecreatefromgif($groundImg);
break;
case 2:
$ground_im = imagecreatefromjpeg($groundImg);
break;
case 3:
$ground_im = imagecreatefrompng($groundImg);
break;
}

$waterImg = "DSC05949.jpeg";
$imgInfo = getimagesize($waterImg);
$water_w = $imgInfo[0];
$water_h = $imgInfo[1]; // 修正原稿中的变量命名错误

switch($imgInfo[2]){
case 1:
$water_im = imagecreatefromgif($waterImg);
break;
case 2:
$water_im = imagecreatefromjpeg($waterImg);
break;
case 3:
$water_im = imagecreatefrompng($waterImg);
break;
}

// 执行合并操作
imagecopy($ground_im,$water_im,100,100,0,0,500,500);

header("Content-type: image/jpeg");
imagejpeg($ground_im);
// 注意:实际使用中应销毁所有创建的图像资源
  • 获取元数据:getimagesize 返回数组,其中索引 [0] 为宽度,[1] 为高度,[2] 为图像类型(1=GIF, 2=JPG, 3=PNG)。
  • 根据类型加载:使用 switch-case 结构根据类型码调用 imagecreatefromgif/jpg/png 加载图像资源。
  • 像素复制:imagecopy 是最核心的函数。参数依次为:目标图像、源图像、目标 X 偏移、目标 Y 偏移、源 X 偏移、源 Y 偏移、源宽度、源高度。

此外,PHP 还提供 imagecopymerge(支持透明度合并)和 imagecopyresized(缩放后合并)等函数,可根据具体设计需求调整。

总结

PHP 处理图片水印依赖于 GD 库提供的图像资源管理功能。文字水印侧重文本绘制,图片水印侧重像素块的重叠合并。理解 getimagesize 的类型判断和 imagecopy 的参数映射是掌握这一技能的关键。以上就是 PHP 图片加水印原理的详细内容,更多关于 PHP 图像处理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。