PHP实现图片加水印技术分享

1 下载量 30 浏览量 更新于2024-08-30 收藏 65KB PDF 举报
"php实现给一张图片加上水印效果" 在PHP中给图片添加水印是一项常见的任务,尤其在网站开发中用于保护版权或增加品牌标识。以下提供的代码示例介绍了两种不同的方法来实现这一功能。 首先,我们来看第一个简单的水印实现。这个函数`txt()`接收多个参数,包括要加水印的图片路径、水印文字、文字大小、水印位置、文字颜色以及一个标志,用于决定是否直接在原图上添加水印。如果`$flag`为`true`,水印将被添加到原图上,否则会创建一个新的带有水印的副本。 ```php function txt($i, $t = '版权所有', $size = 25, $pos = 5, $color = 'rand', $flag = true, $type = '_txt') { // 创建图像资源 $img = imagecreatefromjpeg($i); // 获取图像宽度和高度 $w = imagesx($img); $h = imagesy($img); // 指定字体文件路径 $font = dirname(__FILE__) . '/font/ls.ttf'; // 计算文字的宽度和高度 $ps = imagettfbbox($size, 0, $font, $t); $tw = $ps[4]; $th = abs($ps[5]); // 根据位置参数设置水印坐标 switch ($pos) { case 1: // ... case 2: // ... case 3: // ... case 4: // ... case 5: // 位于图像中心偏下 $x = ($w - $tw) / 2; $y = ($h - $th) / 2 + $th; break; case 6: // ... case 7: // ... case 8: // ... case 9: // ... default: // 默认位置 break; } // 获取颜色 $c = getcolor($img, $color); // 添加水印文字 imagettftext($img, $size, 0, $x, $y, $c, $font, $t); // 如果$flag为true,在原图上添加水印,否则创建新文件 if ($flag) { imagejpeg($img, $i); } else { $ext = ext($i); $ppp = rtrim($i, '.' . $ext); $ppp = $ppp . $type . '.' . $ext; imagejpeg($img, $ppp); } } // 获取颜色函数 function getcolor($i, $c = 'rand', $a = 50) { // 根据颜色参数设置颜色 switch ($c) { case 'white': $cc = imagecolorallocatealpha($i, 255, 255, 255, $a); break; // 其他颜色处理... } return $cc; } ``` 在上述代码中,`getcolor()`函数用于根据指定的颜色参数创建图像颜色。例如,如果 `$c` 是 `'white'`,那么它会返回一个半透明的白色。`imagettfbbox()` 函数用于计算文字的尺寸,`imagettftext()` 则用于在图像上绘制文本水印。 这个例子中的水印位置是通过`switch`语句来确定的。`$pos`参数可以取1到9的值,代表不同的位置。然而,示例中并未给出具体的每个位置的实现,需要根据实际需求进行补充。 第二个方法虽然没有在摘要中给出具体实现,但提到了它是功能更强大的版本,并且进行了封装,可能包括了更多的自定义选项,如调整水印透明度、旋转角度、支持多种水印类型(如图片水印)等。 在实际应用中,可以结合这两个方法,根据项目需求进行选择或定制。例如,可以创建一个更通用的函数,接受更多参数,以适应不同的水印样式和位置需求。同时,为了提高性能,可以考虑使用GD库或Imagick扩展来处理图像,它们提供了更多的图像操作功能。 请注意,这个示例假设你已经在服务器上安装了GD库,这是PHP处理图像所必需的。此外,确保字体文件(如`ls.ttf`)在指定的路径下可用,因为`imagettfbbox()`和`imagettftext()`需要它来绘制文本。 总结起来,PHP实现图片加水印主要涉及到图像处理函数,如`imagecreatefromjpeg()`、`imagettfbbox()`、`imagettftext()`等,以及对图像资源的操作,如颜色分配和保存图像。通过灵活地组合这些函数,可以创建出满足不同需求的水印功能。