当前位置:首页 > JavaScript

js 实现图片水印

2026-04-04 09:10:39JavaScript

实现图片水印的方法

使用Canvas绘制水印

Canvas是HTML5提供的绘图API,可以通过JavaScript动态生成水印并叠加到图片上。

function addWatermark(imageSrc, watermarkText, callback) {
  const img = new Image();
  img.crossOrigin = 'anonymous';
  img.src = imageSrc;

  img.onload = function() {
    const canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    const ctx = canvas.getContext('2d');

    ctx.drawImage(img, 0, 0);
    ctx.font = '30px Arial';
    ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.fillText(watermarkText, img.width/2, img.height/2);

    callback(canvas.toDataURL('image/png'));
  };
}

// 使用示例
addWatermark('image.jpg', 'Watermark', function(watermarkedImage) {
  document.getElementById('result').src = watermarkedImage;
});

使用CSS实现水印

对于不需要处理原始图片数据的简单场景,可以使用CSS伪元素实现水印效果。

.watermarked {
  position: relative;
}

.watermarked::after {
  content: "Watermark";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 30px;
  color: rgba(255, 255, 255, 0.5);
  pointer-events: none;
}

使用第三方库

对于更复杂的水印需求,可以考虑使用专门的JavaScript库:

  1. watermark.js - 轻量级水印库

    watermark(['image.jpg'])
    .image(watermark.text.lowerRight('Watermark', '30px Arial', '#fff', 0.5))
    .then(function(img) {
     document.body.appendChild(img);
    });
  2. Fabric.js - 功能强大的Canvas库

    const canvas = new fabric.Canvas('canvas');
    fabric.Image.fromURL('image.jpg', function(img) {
    canvas.add(img);
    const text = new fabric.Text('Watermark', {
     left: img.width/2,
     top: img.height/2,
     fill: 'rgba(255,255,255,0.5)',
     fontSize: 30,
     originX: 'center',
     originY: 'center'
    });
    canvas.add(text);
    });

水印安全注意事项

  1. 前端水印容易被移除,重要内容应结合后端水印处理
  2. 可以考虑使用全屏透明水印或重复平铺水印增加移除难度
  3. 对于敏感图片,水印内容可以包含用户唯一标识信息

动态水印实现

可以根据需要生成动态水印,如包含时间或用户信息:

js 实现图片水印

function getDynamicWatermark() {
  const now = new Date();
  return `User ${userId} - ${now.toLocaleString()}`;
}

addWatermark('image.jpg', getDynamicWatermark(), function(result) {
  // 处理结果
});

以上方法提供了从简单到复杂的图片水印实现方案,可以根据具体需求选择适合的方式。

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

相关文章

网页制作css图片切换

网页制作css图片切换

CSS图片切换的实现方法 使用CSS实现图片切换可以通过多种方式完成,以下是几种常见的方法: 纯CSS轮播图 通过CSS动画和关键帧实现自动轮播效果。定义一个容器,内部放置多个图片,利用anima…

vue实现添加图片

vue实现添加图片

使用 <input type="file"> 上传图片 通过 HTML 原生文件输入框获取用户选择的图片文件,结合 Vue 的 v-on 监听文件变化事件。 <template…

js实现图片滚动

js实现图片滚动

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

vue实现图片插件

vue实现图片插件

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

vue 实现图片粘贴

vue 实现图片粘贴

实现图片粘贴功能 在Vue中实现图片粘贴功能,可以通过监听粘贴事件并处理剪贴板中的图片数据。以下是具体实现方法: 监听粘贴事件 在Vue组件中,为需要粘贴图片的元素添加paste事件监听器。可以使用…

vue实现图片标注

vue实现图片标注

Vue 实现图片标注功能 实现图片标注功能通常需要结合 Canvas 或 SVG 技术,以下是一个基于 Vue 的实现方案: 基础实现思路 安装依赖(如需要) npm install fabric…