当前位置:首页 > JavaScript

js 实现水印

2026-01-31 13:21:37JavaScript

实现水印的基本方法

在JavaScript中实现水印可以通过Canvas绘制或CSS样式叠加。以下是两种常见方法:

Canvas绘制方法 创建Canvas元素并绘制文字或图片水印,将Canvas转为Base64后作为背景图。

function createWatermark(text) {
  const canvas = document.createElement('canvas');
  canvas.width = 200;
  canvas.height = 100;
  const ctx = canvas.getContext('2d');
  ctx.font = '16px Arial';
  ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
  ctx.rotate(-20 * Math.PI / 180);
  ctx.fillText(text, 10, 50);
  return canvas.toDataURL();
}

document.body.style.backgroundImage = `url(${createWatermark('Watermark')})`;

CSS伪元素方法 使用::after伪元素创建透明水印层,适合简单文字水印。

const style = document.createElement('style');
style.innerHTML = `
  body::after {
    content: "${'Watermark'}";
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 48px;
    color: rgba(0,0,0,0.1);
    z-index: 9999;
    pointer-events: none;
    transform: rotate(-15deg);
  }
`;
document.head.appendChild(style);

防删除水印实现

为防止用户通过开发者工具删除水印,可采用MutationObserver监控DOM变化。

const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    if (!document.querySelector('.watermark')) {
      restoreWatermark();
    }
  });
});

function restoreWatermark() {
  const watermark = document.createElement('div');
  watermark.className = 'watermark';
  // 水印样式和内容
  document.body.appendChild(watermark);
}

observer.observe(document.body, {
  childList: true,
  subtree: true
});

动态水印参数配置

可通过配置对象自定义水印样式:

function createConfigurableWatermark(config = {}) {
  const {
    text = 'Watermark',
    color = 'rgba(0,0,0,0.1)',
    fontSize = 16,
    angle = -20,
    density = 100
  } = config;

  // 实现逻辑...
}

全屏平铺水印方案

实现重复平铺的水印效果:

function createTiledWatermark() {
  const patternSize = 200;
  const canvas = document.createElement('canvas');
  canvas.width = patternSize;
  canvas.height = patternSize;

  const ctx = canvas.getContext('2d');
  ctx.font = '14px Arial';
  ctx.fillStyle = 'rgba(0,0,0,0.05)';
  ctx.textAlign = 'center';

  for(let i = 0; i < 3; i++) {
    for(let j = 0; j < 3; j++) {
      ctx.save();
      ctx.translate(i * patternSize/3, j * patternSize/3);
      ctx.rotate(-20 * Math.PI / 180);
      ctx.fillText('Confidential', patternSize/6, patternSize/6);
      ctx.restore();
    }
  }

  document.body.style.backgroundImage = `url(${canvas.toDataURL()})`;
  document.body.style.backgroundRepeat = 'repeat';
}

图片水印实现

为图片添加水印的示例:

function watermarkImage(imgElement, text) {
  const canvas = document.createElement('canvas');
  canvas.width = imgElement.width;
  canvas.height = imgElement.height;

  const ctx = canvas.getContext('2d');
  ctx.drawImage(imgElement, 0, 0);
  ctx.font = '30px Arial';
  ctx.fillStyle = 'rgba(255,255,255,0.5)';
  ctx.textAlign = 'center';
  ctx.fillText(text, canvas.width/2, canvas.height/2);

  imgElement.src = canvas.toDataURL();
}

js 实现水印

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

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

vue实现水印组件

vue实现水印组件

Vue 水印组件实现 基础水印组件实现 创建一个基础水印组件,通过 props 接收文本、颜色、大小等参数: <template> <div class="watermark-…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…