PHP怎样创建图片水印_为图片添加水印的方法【处理】
技术百科
蓮花仙者
发布时间:2026-01-20
浏览: 次 PHP添加图片水印主要有五种方法:一、GD库文字水印,支持TrueType字体与透明度控制;二、GD库图片水印,用PNG Logo叠加并保持Alpha通道;三、ImageMagick扩展,支持混合模式与批量处理;四、Canvas前端绘制后由PHP接收Base64数据保存;五、imagefilter滤镜模拟水印效果。
如果您需要在PHP中为图片添加水印,可以通过GD库或ImageMagick扩展实现图像叠加操作。以下是几种可行的处理方法:
一、使用GD库添加文字水印
GD库内置支持TrueType字体渲染,适合在图片上叠加半透明文字水印,控制位置、字体大小、颜色和透明度。
1、启用GD扩展并确认支持FreeType:检查phpinfo()中是否显示“FreeType Support => enabled”。
2、使用imagecreatefromjpeg(或png/gif对应函数)加载原图。
3、使用imagecolorallocatealpha分配带透明度的文字颜色,例如设置alpha值为50(0为完全不透明,127为完全透明)。
4、调用imagettftext函数,在指定坐标处绘制文字,参数包括字体路径、字号、角度、x/y偏移、颜色、字体文件路径及水印文本。
5、使用imagejpeg(或imagepng)输出或保存处理后的图片,并释放资源(imagedestroy)。
二、使用GD库添加图片水印(Logo叠加)
该方法通过将一张PNG格式的Logo图像作为图层,以指定透明度和位置合成到目标图片右下角,适用于带Alpha通道的水印图。
1、用imagecreatefromjpeg加载背景图,用imagecreatefrompng加载PNG水印图(保留透明通道)。
2、获取两张图的宽高,计算水印放置坐标(如:$dst_x = $src_w - $logo_w - 10; $dst_y = $src_h - $logo_h - 10)。
3、调用imagecopyresampled函数,传入源图、目标图、目标x/y、源x/y、目标宽高、源宽高及缩放比例(若需等比缩放水印)。
4、确保水印图使用imagealphablending($logo, false)和imagesavealpha($logo, true)保持透明背景。
5、输出结果并销毁图像资源。
三、使用ImageMagick扩展添加水印
ImageMagick扩展提供更灵活的图像合成能力,支持多种混合模式、模糊边缘、旋转水印及批量处理,适合复杂水印需求。
1、确认已安装imagick扩展且ImageMagick二进制程序可用(exec('convert -version')可验证)。
2、实例化Imagick对象并读取原图:$img = new Imagick('source.jpg');。
3、创建水印图对象:$watermark = new Imagick('logo.png');,调用$watermark->setImageOpacity(0.3)设置整体透明度。
4、使用compositeImage方法叠加,参数包括水印对象、合成方式(如Imagick::COMPOSITE_OVER)、x偏移、y偏移。
5、调用writeImage保存结果,或用getImageBlob获取二进制数据输出。
四、使用Canvas方式在前端预览后由PHP接收并保存水印图
该方法借助HTML5 Canvas完成客户端水印绘制,减轻服务器压力,适用于用户自定义文字/位置的交互场景。
1、在页面中用canvas>加载原图,使用drawImage绘制底图。
2、设置canvas上下文font、fillStyle、globalAlpha,调用fillText绘制文字水印。
3、调用canvas.toDataURL('image/jpeg', 0.9)生成Base64编码图片数据。
4、通过AJAX将Base64字符串发送至PHP接口,使用base64_decode解码并file_put_contents保存为文件。
5、注意过滤data:image/jpeg;base64,前缀,并校验解码后内容是否为合法JPEG头(0xFFD8FFE0或0xFFD8FFE1)。
五、使用PHP内置函数imagefilter叠加灰度/浮雕效果模拟水印感
当无需真实文字或Logo时,可通过图像滤镜增强版权标识感,适用于对性能敏感或GD受限的轻量环境。
1、加载原始图片后,复制一份副本用于处理:$overlay = imagecreatefromjpeg('src.jpg');。
2、对副本应用imagefilter($overlay, IMG_FILTER_GRAYSCALE)转为灰度。
3、再执行imagefilter($overlay, IMG_FILTER_EMBOSS)生成浮雕效果,增强纹理对比。
4、使用imagecopymerge将处理后的副本以30%不透明度叠加到底图指定区域。
5、输出合并结果,注意imagecopymerge最后一个参数为合并透明度(0–100),非alpha值。
# 加载
# 可以通过
# 可通过
# 适用于
# 滤镜
# 两张
# 自定义
# 几种
# 您需要
# 明度
# go
# 对象
# html
# 编码
# 字符串
# 接口
# 前端
# php
# canva
# ajax
# blend
# canvas
# html5
# GD库
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++怎么实现大文件的分块读写_c++ 文件指针s
- Win11怎么设置右键刷新选项_Windows11
- Win11文件扩展名怎么显示 Win11查看文件后
- Mac如何创建和管理多个桌面空间_Mac高效多任务
- 如何使用Golang配置安全开发环境_防止敏感信息
- Win11任务栏怎么放到顶部_Win11修改任务栏
- php增删改查在php8里有什么变化_新特性对cu
- 如何使用Golang指针与结构体结合_修改结构体内
- Python技术债务管理_长期维护解析【教程】
- Mac如何备份到iCloud_Mac桌面与文稿文件
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- c++中如何对数组进行排序_c++数组排序算法汇总
- PythonFastAPI项目实战教程_API接口
- 如何使用Golang defer优化性能_减少不必
- LINUX如何开放防火墙端口_Linux fire
- Go 中 defer 在 goroutine 内部
- 短链接怎么用php还原_从基础原理到代码实现教学【
- Win11怎么查看已连接wifi密码 Win11查
- Go语言中CookieJar的持久化机制解析:内存
- c++的mutex和lock_guard如何使用
- Golang如何遍历目录文件_Golang fil
- Win10如何优化内存使用_Win10内存优化技巧
- 如何使用Golang reflect检查方法数量_
- 如何在 Django 中安全修改用户密码而不使会话
- 如何使用Golang指针与接口结合_实现方法调用和
- Windows怎样拦截QQ浏览器广告_Window
- c++ namespace命名空间用法_c++避免
- Win11相机打不开提示错误怎么修_相机权限开启与
- 如何在Golang中操作嵌套切片指针_Golang
- Windows7怎么找回经典开始菜单_Window
- 如何处理“XML格式不正确”错误 常见XML we
- Win11如何更改任务栏颜色 Win11自定义任务
- Windows蓝屏错误0x00000018怎么处理
- php与c语言在嵌入式中有何区别_对比两者在硬件控
- Win11怎么查看硬盘型号_Windows 11检
- C++如何解析JSON数据?(nlohmann/j
- Win11怎么设置声音输出设备_Windows11
- c++如何使用std::bind绑定函数参数_c+
- Win11怎么修复系统文件_使用sfc命令修复Wi
- Win11怎么设置虚拟键盘_打开Win11屏幕键盘
- 如何在Golang中实现微服务服务拆分_Golan
- c++中的Tag Dispatching是什么_c
- Windows资源管理器总是卡顿或重启怎么办?(修
- 如何使用Golang包导出规则_控制函数和变量可见
- 如何减少Golang内存碎片化_Golang内存分
- SAX解析器是什么,它与DOM在处理大型XML文件
- Win11怎么更改账户头像_Windows 11自
- php报错怎么查看_定位PHP致命错误与警告的方法
- VSC怎么创建PHP项目_从零开始搭建项目的步骤【


QQ客服