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

图片水印实现

为图片添加水印的示例:

js 实现水印

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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…