当前位置:首页 > 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);
}

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

相关文章

vue 水印 实现

vue 水印 实现

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

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

vue 实现图片单选

vue 实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能,可以通过结合 v-model 和自定义事件来实现。以下是具体实现方法: 方法一:使用 v-model 和计算属性 创建一个 Vue 组件…

js实现图片加载

js实现图片加载

使用Image对象加载图片 通过JavaScript的Image对象可以动态加载图片,适用于需要预加载或动态插入图片的场景。 const img = new Image(); img.src =…

vue实现图片裁切

vue实现图片裁切

Vue 实现图片裁切的方法 使用 vue-cropperjs 库 vue-cropperjs 是一个基于 Cropper.js 的 Vue 封装库,专门用于图片裁切功能。 安装依赖: npm in…

vue实现图片组件

vue实现图片组件

Vue 实现图片组件的方法 基础图片组件实现 创建一个基础的图片组件,支持动态传入图片路径和替代文本。在Vue项目中新建一个ImageComponent.vue文件: <template>…