当前位置:首页 > 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中实现图片查看功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方组件库(如Element UI、Vant等)或专用插件(如view…

js实现图片加载

js实现图片加载

使用Image对象加载图片 通过JavaScript的Image对象可以动态加载图片,适用于需要预加载或动态插入图片的场景。 const img = new Image(); img.src =…

jquery图片轮播

jquery图片轮播

jQuery图片轮播实现方法 基础HTML结构 创建一个简单的HTML结构,包含轮播容器、图片列表和导航按钮。 <div class="slider"> <div class=…

vue实现图片拼接

vue实现图片拼接

Vue 实现图片拼接的方法 使用 Canvas 进行图片拼接 Canvas 提供了强大的绘图能力,可以用于实现图片拼接功能。通过创建一个 Canvas 元素,将多张图片绘制到 Canvas 上,最终导…

vue 实现预览图片

vue 实现预览图片

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,以下是几种常见的方法: 使用Element UI的el-image组件 Element UI提供了内置的图片预览功能,通过el-im…

vue实现html图片

vue实现html图片

在 Vue 中实现 HTML 图片渲染 在 Vue 中渲染 HTML 图片可以通过多种方式实现,以下是几种常见的方法: 使用 v-html 指令渲染包含图片标签的 HTML 字符串 <tem…