当前位置:首页 > PHP

php实现图片水印

2026-01-30 06:33:02PHP

添加文字水印

使用 imagettftext 函数在图片上添加文字水印。需要确保服务器安装了 GD 库和 FreeType 支持。

$image = imagecreatefromjpeg('original.jpg');
$color = imagecolorallocate($image, 255, 255, 255);
$font = 'arial.ttf';
imagettftext($image, 20, 0, 10, 30, $color, $font, 'Watermark Text');
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

添加图片水印

使用 imagecopyimagecopymerge 函数将水印图片叠加到原图上。

$original = imagecreatefromjpeg('original.jpg');
$watermark = imagecreatefrompng('watermark.png');
$margin_right = 10;
$margin_bottom = 10;
$sx = imagesx($watermark);
$sy = imagesy($watermark);
imagecopy(
    $original, 
    $watermark, 
    imagesx($original) - $sx - $margin_right, 
    imagesy($original) - $sy - $margin_bottom, 
    0, 
    0, 
    $sx, 
    $sy
);
header('Content-Type: image/jpeg');
imagejpeg($original);
imagedestroy($original);
imagedestroy($watermark);

调整水印透明度

使用 imagecopymerge 函数可以实现半透明效果,最后一个参数控制透明度(0-100)。

php实现图片水印

imagecopymerge(
    $original,
    $watermark,
    imagesx($original) - $sx - $margin_right,
    imagesy($original) - $sy - $margin_bottom,
    0,
    0,
    $sx,
    $sy,
    50  // 50%透明度
);

保存水印图片

使用 imagejpegimagepngimagegif 函数将处理后的图片保存到文件。

imagejpeg($original, 'watermarked.jpg', 90);  // 90表示JPEG质量

支持多种图片格式

根据原始图片类型选择对应的创建函数:

php实现图片水印

function createImageFromFile($filename) {
    $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
    switch($ext) {
        case 'jpg':
        case 'jpeg':
            return imagecreatefromjpeg($filename);
        case 'png':
            return imagecreatefrompng($filename);
        case 'gif':
            return imagecreatefromgif($filename);
        default:
            throw new Exception('Unsupported image format');
    }
}

自动调整水印位置

计算水印位置,确保不会超出图片边界:

$pos_x = min(imagesx($original) - $sx - $margin_right, $desired_x);
$pos_y = min(imagesy($original) - $sy - $margin_bottom, $desired_y);

批量添加水印

遍历目录中的所有图片文件进行处理:

$files = glob('images/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
foreach($files as $file) {
    $original = createImageFromFile($file);
    // 添加水印处理
    imagejpeg($original, 'watermarked_'.basename($file));
    imagedestroy($original);
}

标签: 水印图片
分享给朋友:

相关文章

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from './…

vue实现水印组件

vue实现水印组件

Vue 水印组件的实现方法 使用Canvas绘制水印 在Vue组件中通过Canvas动态生成水印图案,将其作为背景添加到目标元素上。 <template> <div ref="…

vue实现图片闪烁

vue实现图片闪烁

实现图片闪烁效果的方法 在Vue中实现图片闪烁效果可以通过CSS动画或JavaScript动态控制样式。以下是几种常见方法: CSS动画实现 通过@keyframes定义闪烁动画,并应用到图片元素上…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

vue实现图片插件

vue实现图片插件

Vue 图片插件实现方案 在 Vue 中实现图片插件通常涉及图片展示、懒加载、预览等功能。以下是几种常见的实现方式: 基础图片组件封装 创建一个可复用的图片组件,支持默认图片、加载失败处理等基础功能…

vue实现图片插入

vue实现图片插入

Vue 实现图片插入的方法 在 Vue 中插入图片可以通过多种方式实现,具体取决于图片的来源和用途。以下是几种常见的方法: 静态图片插入 对于项目中的静态图片,可以直接通过 src 属性引入。图片需…