当前位置:首页 > 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中实现图片循环通常使用v-for指令结合数组数据。以下是基础实现方式: <template> <div> <img v-f…

css3手工制作图片

css3手工制作图片

使用CSS3手工制作图片 CSS3可以通过各种属性如box-shadow、border-radius、gradient等来手工绘制简单的图形或图片效果。以下是几种常见的方法: 绘制圆形 通过bord…

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-awes…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标…

css制作图片

css制作图片

使用CSS创建图片效果 CSS可以通过多种方式实现图片的显示、处理和特效。以下是几种常见的方法: 使用background-image属性 在CSS中可以通过background-image属性将图…