当前位置:首页 > PHP

php实现水印

2026-01-29 23:31:21PHP

添加水印的基本方法

使用 PHP 的 GD 库或 Imagick 扩展可以为图片添加水印。GD 库是 PHP 默认支持的图像处理库,而 Imagick 提供了更强大的功能。

使用 GD 库添加文字水印

// 加载原始图片
$image = imagecreatefromjpeg('original.jpg');
$watermarkText = 'Watermark';
$font = 'arial.ttf'; // 字体文件路径
$color = imagecolorallocatealpha($image, 255, 255, 255, 50); // 白色半透明

// 在图片右下角添加水印
imagettftext($image, 20, 0, imagesx($image) - 200, imagesy($image) - 20, $color, $font, $watermarkText);

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

使用 GD 库添加图片水印

// 加载原始图片和水印图片
$image = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');

// 获取水印图片尺寸
$watermarkWidth = imagesx($watermark);
$watermarkHeight = imagesy($watermark);

// 将水印放置在右下角
imagecopy($image, $watermark, imagesx($image) - $watermarkWidth, imagesy($image) - $watermarkHeight, 0, 0, $watermarkWidth, $watermarkHeight);

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

使用 Imagick 添加水印

// 创建 Imagick 对象
$image = new Imagick('original.jpg');
$watermark = new Imagick();
$watermark->newImage(200, 50, new ImagickPixel('transparent'));

// 创建水印文本
$draw = new ImagickDraw();
$draw->setFont('arial.ttf');
$draw->setFontSize(20);
$draw->setFillColor('white');
$watermark->annotateImage($draw, 10, 30, 0, 'Watermark');

// 设置水印透明度
$watermark->setImageOpacity(0.5);

// 合并水印
$image->compositeImage($watermark, Imagick::COMPOSITE_OVER, imagesx($image) - 210, imagesy($image) - 60);

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

水印位置计算方法

水印位置可以通过图片尺寸和水印尺寸计算得出:

  • 左上角:x = 10, y = 10
  • 右上角:x = image_width - watermark_width - 10, y = 10
  • 左下角:x = 10, y = image_height - watermark_height - 10
  • 右下角:x = image_width - watermark_width - 10, y = image_height - watermark_height - 10
  • 居中:x = (image_width - watermark_width) / 2, y = (image_height - watermark_height) / 2

批量添加水印

$directory = 'images/';
$files = glob($directory . '*.jpg');

foreach ($files as $file) {
    $image = imagecreatefromjpeg($file);
    $watermark = imagecreatefrompng('watermark.png');

    // 添加水印逻辑

    imagejpeg($image, 'watermarked_' . basename($file));
    imagedestroy($image);
    imagedestroy($watermark);
}

水印透明度设置

GD 库中可以使用 imagecolorallocatealpha() 设置透明度,第四个参数为透明度值(0-127,0为完全不透明)。Imagick 中使用 setImageOpacity() 方法,参数为 0-1 之间的浮点数。

php实现水印

注意事项

  • 确保服务器安装了 GD 库或 Imagick 扩展
  • 处理不同格式图片时使用对应的函数(如 imagecreatefrompng()imagecreatefromgif()
  • 注意文件权限问题,PHP 需要有写入权限
  • 大图片处理时注意内存限制

标签: 水印php
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…