当前位置:首页 > PHP

php水印实现

2026-01-29 15:49:38PHP

PHP 添加图片水印的方法

使用 imagecopyimagecopymerge 函数在图片上叠加水印图片

$sourceImage = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');

$sourceWidth = imagesx($sourceImage);
$sourceHeight = imagesy($sourceImage);
$watermarkWidth = imagesx($watermark);
$watermarkHeight = imagesy($watermark);

$positionX = $sourceWidth - $watermarkWidth - 10;
$positionY = $sourceHeight - $watermarkHeight - 10;

imagecopy(
    $sourceImage,
    $watermark,
    $positionX,
    $positionY,
    0,
    0,
    $watermarkWidth,
    $watermarkHeight
);

header('Content-Type: image/jpeg');
imagejpeg($sourceImage);
imagedestroy($sourceImage);

PHP 添加文字水印的方法

使用 imagettftext 函数在图片上添加文字水印

$image = imagecreatefromjpeg('original.jpg');
$textColor = imagecolorallocate($image, 255, 255, 255);
$fontPath = 'arial.ttf';

imagettftext(
    $image,
    20, // 字体大小
    0,  // 角度
    30, // X位置
    50, // Y位置
    $textColor,
    $fontPath,
    'Watermark Text'
);

header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

透明水印实现方法

调整水印透明度使用 imagecopymerge 函数

$sourceImage = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');

imagecopymerge(
    $sourceImage,
    $watermark,
    10,
    10,
    0,
    0,
    imagesx($watermark),
    imagesy($watermark),
    50 // 透明度 (0-100)
);

imagejpeg($sourceImage, 'watermarked.jpg');
imagedestroy($sourceImage);

批量添加水印的方法

遍历目录为多张图片添加水印

$directory = 'images/';
$files = glob($directory.'*.{jpg,jpeg,png}', GLOB_BRACE);

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

    imagecopy(
        $image,
        $watermark,
        imagesx($image) - imagesx($watermark) - 10,
        imagesy($image) - imagesy($watermark) - 10,
        0,
        0,
        imagesx($watermark),
        imagesy($watermark)
    );

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

水印位置计算方法

动态计算水印位置公式

php水印实现

// 居中水印
$positionX = (imagesx($sourceImage) - imagesx($watermark)) / 2;
$positionY = (imagesy($sourceImage) - imagesy($watermark)) / 2;

// 九宫格位置计算
$positions = [
    'top-left' => [10, 10],
    'top-center' => [(imagesx($sourceImage) - imagesx($watermark)) / 2, 10],
    'top-right' => [imagesx($sourceImage) - imagesx($watermark) - 10, 10],
    // 其他位置类似计算
];

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

相关文章

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

vue 水印 实现

vue 水印 实现

Vue 水印实现方法 使用 Canvas 绘制水印 在 Vue 中可以通过 Canvas 动态生成水印,并将其作为背景或覆盖层添加到页面中。 <template> <div c…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…

php 实现链表

php 实现链表

PHP 实现链表的方法 链表是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。PHP 中可以通过类和对象来实现链表。 定义链表节点类 创建一个 ListNode 类,用于表示链…

php实现重定向

php实现重定向

使用header函数进行重定向 在PHP中,header()函数是实现重定向的常用方法。通过发送HTTP头信息Location,浏览器会自动跳转到指定URL。需确保在调用header()前没有输出任何…

php 实现多继承

php 实现多继承

在PHP中,原生不支持多继承,但可以通过以下几种方法模拟实现类似多继承的功能: 使用 trait Trait是PHP 5.4引入的特性,允许在类中复用代码片段,可以视为一种轻量级的继承机制。一个类可…