当前位置:首页 > 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 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model 管…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

vue实现图片识别

vue实现图片识别

Vue 实现图片识别的方法 使用 Tesseract.js 进行 OCR 识别 Tesseract.js 是一个基于 JavaScript 的 OCR 库,可以在浏览器中直接识别图片中的文字。在 Vu…

vue实现图片压缩

vue实现图片压缩

使用 canvas 实现图片压缩 在 Vue 项目中可以通过 canvas 的 drawImage 和 toDataURL 方法实现图片压缩。创建一个方法处理图片文件,将其绘制到 canvas 并输出…

vue实现pdf水印

vue实现pdf水印

添加PDF水印的实现方法 在Vue中实现PDF水印可以通过以下步骤完成,主要依赖第三方库如pdf-lib或pdf.js。 使用pdf-lib库添加水印 安装pdf-lib库: npm instal…

vue图片预览实现

vue图片预览实现

实现图片预览的常见方法 在Vue中实现图片预览功能可以通过多种方式完成,以下是几种常见的方法: 使用第三方库(如viewer.js) 安装viewer.js库: npm install v-vie…