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对应函数)加载原图。
立即学习“PHP免费学习笔记(深入)”;
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值。











