PHP实现图片加水印技术分享
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()`等,以及对图像资源的操作,如颜色分配和保存图像。通过灵活地组合这些函数,可以创建出满足不同需求的水印功能。
2020-12-17 上传
2020-12-19 上传
2023-06-10 上传
2023-06-10 上传
2023-02-07 上传
2023-04-24 上传
2023-09-24 上传
2023-05-26 上传
weixin_38735544
- 粉丝: 1
- 资源: 944
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解