当前位置:首页 > JavaScript

js实现水印

2026-01-31 14:50:30JavaScript

使用Canvas绘制水印

在HTML中创建一个Canvas元素,通过JavaScript绘制文字或图片水印。Canvas提供了灵活的绘图API,可以自定义水印的样式和位置。

function addWatermark(text, options = {}) {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  canvas.width = options.width || 200;
  canvas.height = options.height || 100;

  ctx.font = options.font || '16px Arial';
  ctx.fillStyle = options.color || 'rgba(0, 0, 0, 0.1)';
  ctx.textAlign = options.align || 'center';
  ctx.textBaseline = options.baseline || 'middle';

  ctx.fillText(text, canvas.width / 2, canvas.height / 2);

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

应用水印到页面

将生成的水印作为背景图片应用到目标元素上,通过CSS的background-image属性实现平铺效果。

function applyWatermark(element, watermarkUrl) {
  element.style.backgroundImage = `url(${watermarkUrl})`;
  element.style.backgroundRepeat = 'repeat';
}

动态水印保护

为了防止用户通过开发者工具删除水印,可以使用MutationObserver监听DOM变化,当水印被移除时重新添加。

function protectWatermark(watermarkElement) {
  const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
      if (!document.body.contains(watermarkElement)) {
        document.body.appendChild(watermarkElement);
      }
    });
  });

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

SVG水印实现

使用SVG创建矢量水印,具有更好的清晰度和缩放性能。SVG水印可以通过Base64编码嵌入到CSS中。

function createSvgWatermark(text) {
  const svg = `
    <svg xmlns="http://www.w3.org/2000/svg" width="200" height="100">
      <text x="50%" y="50%" fill="rgba(0,0,0,0.1)" 
            font-family="Arial" font-size="16" 
            text-anchor="middle" dominant-baseline="middle">
        ${text}
      </text>
    </svg>
  `;
  return `data:image/svg+xml;base64,${btoa(svg)}`;
}

图片水印处理

对于需要添加水印的图片,可以使用Canvas将水印绘制到原始图片上,然后导出新的图片数据。

async function addWatermarkToImage(imageUrl, watermarkText) {
  const img = new Image();
  img.crossOrigin = 'Anonymous';
  img.src = imageUrl;

  await new Promise((resolve) => img.onload = resolve);

  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.fillText(watermarkText, 50, 50);

  return canvas.toDataURL('image/jpeg');
}

水印样式自定义

提供多种样式选项,允许用户自定义水印的角度、透明度、间距等属性。

function createCustomWatermark(text, {
  fontSize = 20,
  color = 'rgba(0,0,0,0.1)',
  angle = -30,
  spacing = 100
} = {}) {
  const canvas = document.createElement('canvas');
  const size = spacing * 2;
  canvas.width = size;
  canvas.height = size;
  const ctx = canvas.getContext('2d');

  ctx.font = `${fontSize}px Arial`;
  ctx.fillStyle = color;
  ctx.textAlign = 'center';
  ctx.textBaseline = 'middle';
  ctx.translate(size / 2, size / 2);
  ctx.rotate(angle * Math.PI / 180);
  ctx.fillText(text, 0, 0);

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

全屏水印实现

创建一个覆盖整个页面的水印层,使用绝对定位和z-index确保水印显示在内容上方。

js实现水印

function createFullscreenWatermark(text) {
  const watermark = document.createElement('div');
  watermark.style.position = 'fixed';
  watermark.style.top = '0';
  watermark.style.left = '0';
  watermark.style.width = '100%';
  watermark.style.height = '100%';
  watermark.style.pointerEvents = 'none';
  watermark.style.zIndex = '9999';
  watermark.style.backgroundImage = `url(${createCustomWatermark(text)})`;

  document.body.appendChild(watermark);
  return watermark;
}

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

相关文章

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js sort 实现

js sort 实现

数组排序基础方法 JavaScript 数组的 sort() 方法默认按照字符串 Unicode 码点顺序排序。直接调用时会将元素转为字符串再比较: const arr = [10, 2, 5, 1…

vue.js实现改

vue.js实现改

Vue.js 实现修改功能 在 Vue.js 中实现修改功能通常涉及以下几个关键步骤: 数据绑定与表单处理 使用 v-model 实现表单数据与 Vue 实例数据的双向绑定。例如修改用户信息时,表单…