当前位置:首页 > PHP

php实现图片水印

2026-02-15 04:24:02PHP

添加文字水印

使用 imagettftext 函数可以在图片上添加自定义文字水印。需要确保服务器安装了 GD 库和 FreeType 支持。

// 加载原始图片
$image = imagecreatefromjpeg('original.jpg');
$color = imagecolorallocate($image, 255, 255, 255); // 白色文字
$font = 'arial.ttf'; // 字体文件路径
imagettftext($image, 20, 0, 50, 50, $color, $font, 'Watermark Text');

// 输出图片
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

添加图片水印

通过 imagecopyimagecopymerge 函数可以将另一张图片作为水印叠加到主图上。

php实现图片水印

// 主图和水印图
$mainImg = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');

// 获取水印尺寸
$wmWidth = imagesx($watermark);
$wmHeight = imagesy($watermark);

// 合并水印(最后参数控制透明度)
imagecopymerge(
    $mainImg, $watermark, 
    imagesx($mainImg) - $wmWidth - 10, // X位置(右下角)
    imagesy($mainImg) - $wmHeight - 10, // Y位置
    0, 0, $wmWidth, $wmHeight, 50 // 50%透明度
);

// 输出
header('Content-Type: image/jpeg');
imagejpeg($mainImg);
imagedestroy($mainImg);
imagedestroy($watermark);

透明文字水印

创建半透明文字水印需要先分配带透明度的颜色:

php实现图片水印

$image = imagecreatefromjpeg('original.jpg');
$color = imagecolorallocatealpha($image, 255, 255, 255, 60); // 60透明度
imagettftext($image, 30, 45, 100, 200, $color, 'arial.ttf', 'Confidential');

多行水印处理

使用 imagettfbbox 计算文本尺寸来实现自动换行:

$text = "Line 1\nLine 2";
$lines = explode("\n", $text);
$yPos = 50;

foreach ($lines as $line) {
    $box = imagettfbbox(20, 0, 'arial.ttf', $line);
    $textWidth = $box[2] - $box[0];
    imagettftext($image, 20, 0, (imagesx($image) - $textWidth)/2, $yPos, $color, 'arial.ttf', $line);
    $yPos += 30;
}

动态水印位置

根据图片尺寸自动计算水印位置:

$margin = 20;
$x = imagesx($image) - $textWidth - $margin; // 右侧
$y = imagesy($image) - $margin; // 底部

注意事项

  • 字体文件需要放在可访问的路径
  • JPEG输出会丢失透明度,PNG更适合透明水印
  • 处理前检查extension_loaded('gd')
  • 大图片处理可能需要调整内存限制

这些方法可以组合使用,例如同时添加文字和图片水印,或创建半透明的平铺水印效果。

标签: 水印图片
分享给朋友:

相关文章

vue实现图片预览

vue实现图片预览

Vue 实现图片预览的方法 使用 Element UI 的 el-image 组件 Element UI 提供了 el-image 组件,支持图片预览功能。通过设置 preview-src-list…

网页制作css图片切换

网页制作css图片切换

CSS图片切换的实现方法 使用CSS实现图片切换可以通过多种方式完成,以下是几种常见的方法: 纯CSS轮播图 通过CSS动画和关键帧实现自动轮播效果。定义一个容器,内部放置多个图片,利用anima…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…

vue 水印 实现

vue 水印 实现

Vue 水印实现方法 使用 Canvas 绘制水印 在 Vue 中可以通过 Canvas 动态生成水印,并将其作为背景或覆盖层添加到页面中。 <template> <div…

vue实现图片编辑

vue实现图片编辑

Vue实现图片编辑的方法 使用第三方库vue-cropper 安装vue-cropper库: npm install vue-cropperjs 在Vue组件中使用: <template&g…