当前位置:首页 > 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')
  • 大图片处理可能需要调整内存限制

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

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

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

vue实现图片取色

vue实现图片取色

Vue 实现图片取色功能 在 Vue 中实现图片取色功能,可以通过 Canvas API 获取图片像素数据,并提取颜色信息。以下是具体实现方法: 使用 Canvas 获取图片颜色数据 创建 Canv…

vue 实现 图片预览

vue 实现 图片预览

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,以下是几种常见的方法: 使用HTML5的FileReader API 通过FileReader读取用户上传的图片文件并显示预览:…

vue实现图片裁切

vue实现图片裁切

Vue 实现图片裁切的方法 使用 vue-cropperjs 库 vue-cropperjs 是一个基于 Cropper.js 的 Vue 封装库,专门用于图片裁切功能。 安装依赖: npm in…

vue实现图片合成

vue实现图片合成

Vue实现图片合成的方法 使用Vue实现图片合成可以通过HTML5的Canvas API或第三方库来完成。以下是几种常见的方法: 使用Canvas API 在Vue组件中创建一个Canvas元素,…

vue实现选择图片

vue实现选择图片

Vue 实现选择图片的方法 使用 input[type="file"] 元素 在 Vue 模板中添加一个文件输入元素,通过 @change 事件监听文件选择: <template>…