当前位置:首页 > 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队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现推送消息推送消息

php实现推送消息推送消息

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

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现域名

php实现域名

PHP实现域名操作的方法 获取当前域名 使用$_SERVER['HTTP_HOST']可以获取当前访问的域名: $currentDomain = $_SERVER['HTTP_HOST']; ech…

php 实现目录树

php 实现目录树

实现目录树的方法 在PHP中实现目录树功能,可以通过递归或迭代方式遍历文件系统。以下是两种常见的实现方法: 递归方法 递归是处理目录树的自然方式,适合层级不深的结构: function b…

php 实现的n

php 实现的n

以下是关于 PHP 实现 N 的常见需求及解决方案的整理: 生成 N 个随机数 使用 rand() 或 mt_rand() 函数结合循环生成指定数量的随机数: $n = 10; // 生成10…