当前位置:首页 > 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
分享给朋友:

相关文章

js实现动画

js实现动画

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

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…