当前位置:首页 > PHP

php实现水印

2026-01-29 23:31:21PHP

添加水印的基本方法

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

php实现水印

使用 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 之间的浮点数。

注意事项

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

php实现水印

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

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常…