当前位置:首页 > JavaScript

js 实现图片水印

2026-04-04 09:10:39JavaScript

实现图片水印的方法

使用Canvas绘制水印

Canvas是HTML5提供的绘图API,可以通过JavaScript动态生成水印并叠加到图片上。

function addWatermark(imageSrc, watermarkText, callback) {
  const img = new Image();
  img.crossOrigin = 'anonymous';
  img.src = imageSrc;

  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 = '30px Arial';
    ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.fillText(watermarkText, img.width/2, img.height/2);

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

// 使用示例
addWatermark('image.jpg', 'Watermark', function(watermarkedImage) {
  document.getElementById('result').src = watermarkedImage;
});

使用CSS实现水印

对于不需要处理原始图片数据的简单场景,可以使用CSS伪元素实现水印效果。

js 实现图片水印

.watermarked {
  position: relative;
}

.watermarked::after {
  content: "Watermark";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 30px;
  color: rgba(255, 255, 255, 0.5);
  pointer-events: none;
}

使用第三方库

对于更复杂的水印需求,可以考虑使用专门的JavaScript库:

  1. watermark.js - 轻量级水印库

    js 实现图片水印

    watermark(['image.jpg'])
    .image(watermark.text.lowerRight('Watermark', '30px Arial', '#fff', 0.5))
    .then(function(img) {
     document.body.appendChild(img);
    });
  2. Fabric.js - 功能强大的Canvas库

    const canvas = new fabric.Canvas('canvas');
    fabric.Image.fromURL('image.jpg', function(img) {
    canvas.add(img);
    const text = new fabric.Text('Watermark', {
     left: img.width/2,
     top: img.height/2,
     fill: 'rgba(255,255,255,0.5)',
     fontSize: 30,
     originX: 'center',
     originY: 'center'
    });
    canvas.add(text);
    });

水印安全注意事项

  1. 前端水印容易被移除,重要内容应结合后端水印处理
  2. 可以考虑使用全屏透明水印或重复平铺水印增加移除难度
  3. 对于敏感图片,水印内容可以包含用户唯一标识信息

动态水印实现

可以根据需要生成动态水印,如包含时间或用户信息:

function getDynamicWatermark() {
  const now = new Date();
  return `User ${userId} - ${now.toLocaleString()}`;
}

addWatermark('image.jpg', getDynamicWatermark(), function(result) {
  // 处理结果
});

以上方法提供了从简单到复杂的图片水印实现方案,可以根据具体需求选择适合的方式。

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

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标签…

vue实现图片滚动

vue实现图片滚动

实现图片滚动的 Vue 组件 使用 Vue 实现图片滚动效果可以通过自定义组件或第三方库完成。以下是两种常见方法: 方法一:使用 CSS 动画和 Vue 动态绑定 通过 Vue 的 v-for 和…

vue实现图片切换

vue实现图片切换

实现图片切换的方法 使用v-for和v-bind动态绑定图片 通过v-for循环渲染图片列表,结合v-bind动态绑定图片路径,实现切换效果。 <template> <div&…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

js实现图片移动

js实现图片移动

使用CSS和JavaScript实现图片移动 方法一:使用CSS动画结合JavaScript控制 通过CSS定义动画关键帧,JavaScript动态添加或移除动画类。 /* CSS部分 */ .m…