当前位置:首页 > JavaScript

js 实现图片水印

2026-01-30 17:30:20JavaScript

使用Canvas实现图片水印

通过Canvas绘制水印并叠加到原图上,适用于前端动态生成水印场景。

function addWatermark(imageUrl, text, options = {}) {
  const img = new Image();
  img.crossOrigin = 'anonymous';
  img.src = imageUrl;

  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 = options.font || '20px Arial';
    ctx.fillStyle = options.color || 'rgba(255, 255, 255, 0.5)';
    ctx.textAlign = options.align || 'center';
    ctx.textBaseline = options.baseline || 'middle';
    ctx.fillText(text, img.width/2, img.height/2);

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

CSS背景水印方案

通过CSS重复平铺半透明文本作为背景,适合网页内容保护。

.watermarked {
  position: relative;
}

.watermarked:after {
  content: "CONFIDENTIAL";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 2em;
  color: rgba(0, 0, 0, 0.3);
  transform: rotate(-45deg);
  pointer-events: none;
}

SVG动态水印生成

利用SVG创建可缩放的水印图案,保持清晰度不受分辨率影响。

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

透明PNG水印叠加

预先制作透明PNG水印图片,通过绝对定位叠加到目标图片上。

<div style="position: relative; display: inline-block;">
  <img src="original.jpg" alt="Original Image">
  <img src="watermark.png" 
       style="position: absolute; 
              top: 0; 
              left: 0; 
              opacity: 0.5;
              pointer-events: none;">
</div>

批量处理图片水印

使用File API处理用户上传的多个图片文件并添加水印。

function batchWatermark(files, text) {
  const results = [];
  Array.from(files).forEach(file => {
    const reader = new FileReader();
    reader.onload = function(e) {
      const img = new Image();
      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 = '24px Arial';
        ctx.fillStyle = 'rgba(255,255,255,0.7)';
        ctx.fillText(text, 30, 30);

        canvas.toBlob(blob => {
          results.push(new File([blob], `watermarked_${file.name}`));
        }, 'image/jpeg');
      };
      img.src = e.target.result;
    };
    reader.readAsDataURL(file);
  });
  return results;
}

js 实现图片水印

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

相关文章

vue实现列表水印

vue实现列表水印

实现列表水印的方法 在Vue中为列表添加水印可以通过多种方式实现,以下是几种常见的方法: 使用CSS背景图 通过CSS的background-image属性为列表元素添加水印背景。水印可以是文字或…

h5实现全景图片

h5实现全景图片

H5 实现全景图片的方法 使用 Three.js 库 Three.js 是一个强大的 3D 库,可以用于创建全景图片效果。以下是一个简单的实现步骤: 引入 Three.js 库 <scri…

vue实现水印

vue实现水印

添加静态水印 在Vue中可以通过CSS或Canvas实现静态水印。CSS方式适合简单文字水印,Canvas适合复杂图形或自定义样式。 CSS方式 通过绝对定位和透明度控制,将水印覆盖在页面上:…

jquery 图片

jquery 图片

jQuery 图片操作 jQuery 提供了多种方法来操作图片,包括加载、显示、隐藏、调整尺寸等。以下是一些常见的图片操作方法: 动态加载图片 使用 attr() 方法可以动态修改图片的 src 属…

jquery图片

jquery图片

jQuery 图片操作 jQuery 提供了多种方法来处理图片,包括加载、显示、隐藏、动画效果等。以下是一些常见的 jQuery 图片操作方法: 动态加载图片 使用 jQuery 的 attr()…

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template…