使用JavaScript给图片添加水印的实现方法封装

作者:像素漫游时间:2026-10-31 12:19:54浏览:78

本文介绍如何使用JavaScript结合HTML5 Canvas API为图片添加水印,并提供完整的函数封装示例。内容涵盖基础配置、文字与图案水印的实现逻辑,以及将处理结果转换为Base64格式的方法,帮助开发者快速实现图片处理功能。

前言

在图片处理领域,JavaScript展现出了强大的能力。本文将详细讲解如何利用JavaScript为图片添加水印,并将相关逻辑封装为独立函数,以便在项目中灵活复用。

准备工作

在开始编码前,请确保具备以下条件:

1. 需要添加水印的原始图片文件。

2. 用于覆盖的水印素材(图片或文字)。

3. 一个基础的HTML页面,并正确引入了包含JavaScript代码的script标签。

添加水印效果

首先,我们需要定义一个核心函数,用于执行图片的水印添加操作。以下是一个典型的实现示例:

function addWatermark(imagePath, watermarkPath) {
  var canvas = document.createElement('canvas');
  var context = canvas.getContext('2d');

  // 创建一个新的Image对象,用于加载原始图片
  var image = new Image();
  image.src = imagePath;

  // 在图片加载完成后执行下面的代码
  image.onload = function() {
    canvas.width = image.width;
    canvas.height = image.height;

    // 将原始图片绘制到canvas上
    context.drawImage(image, 0, 0);

    // 创建一个新的Image对象,用于加载水印图片
    var watermark = new Image();
    watermark.src = watermarkPath;

    // 在水印图片加载完成后执行下面的代码
    watermark.onload = function() {
      // 设置水印的位置和尺寸
      var x = 0;
      var y = 0;
      var width = image.width;
      var height = image.height;

      // 平铺水印图片
      context.fillStyle = context.createPattern(watermark, 'repeat');
      context.fillRect(x, y, width, height);

      // 将带有水印的图片转换为base64格式
      var watermarkedImage = canvas.toDataURL();

      // 将base64格式的图片显示在页面上或进行其他操作
      // 例如:document.getElementById('result').src = watermarkedImage;
    };
  };
}

该函数基于HTML5的canvas元素构建。它首先实例化一个canvas节点,并通过getContext('2d')获取二维绘图上下文。随后,函数会异步加载原始图片与水印素材,待资源加载完毕后执行具体的绘制逻辑。

在原始图片加载完成后,将其绘制至canvas画布。接着,加载水印素材并在其onload回调中执行后续代码。此处演示了使用context.createPattern()方法生成平铺图案,并通过fillRect()将其渲染到画布上的过程。

完成绘制后,可通过canvas.toDataURL()将带有水印的图片转换为base64格式字符串,进而用于页面展示或进一步的业务处理。

使用封装的函数

要在HTML页面中应用上述功能,需调用封装好的函数,并传入原始图片与水印素材的路径作为参数。具体调用示例如下:

请确保已在HTML中正确引入包含该函数的JavaScript文件,并将示例中的路径替换为实际的文件地址。

<!DOCTYPE html>
<html>
<head>
  <title>添加水印</title>
</head>
<body>
  <script src="watermark.js"></script>
  <script>
    addWatermark('path/to/original/image.jpg', 'path/to/watermark.png');
  </script>
</body>
</html>

附:加文字水印

文字水印的实现示例代码:

  function blobToImg(blob) {
    return new Promise((resolve, reject) => {
      let reader = new FileReader()
      reader.addEventListener('load', () => {
        let img = new Image()
        img.src = reader.result
        img.addEventListener('load', () => resolve(img))
      })
      reader.readAsDataURL(blob)
    })
  }

  function imgToCanvas(img) {
    let canvas = document.createElement('canvas')
    canvas.width = img.width
    canvas.height = img.height
    let ctx = canvas.getContext('2d')
    ctx.drawImage(img, 0, 0)
    return canvas
  }

  function watermark(canvas, text) {
    return new Promise((resolve, reject) => {
      let ctx = canvas.getContext('2d')
      // 设置填充字号和字体,样式
      ctx.font = "24px 宋体"
      ctx.fillStyle = "#FFC82C"
      // 设置右对齐
      ctx.textAlign = 'right'
      // 在指定位置绘制文字,这里指定距离右下角20坐标的地方
      ctx.fillText(text, canvas.width - 20, canvas.height - 20)
      canvas.toBlob(blob => resolve(blob))
    })
  }

  function imgWatermark(dom, text) {
    let input = document.createElement('input')
    input.setAttribute('type', 'file')
    input.setAttribute('accept', 'image/*')
    input.onchange = async () => {
      let img = await blobToImg(input.files[0])
      let canvas = imgToCanvas(img)
      let blob = await watermark(canvas, text)
      let newImage = await blobToImg(blob)
      dom.appendChild(newImage)
    }
    dom.appendChild(input)
  }

  let dom = document.querySelector('#container')
  imgWatermark(dom, '水印文字')

总结

本文介绍了利用JavaScript结合Canvas API为图片添加水印的技术方案,并将其封装为可复用的函数。通过掌握这些绘图API,开发者可以实现丰富的图像处理与增强效果。

本文关于使用JavaScript给图片添加水印实现方法封装的介绍到此结束,更多相关JS图片添加水印内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

参考资料

  • MDN Web文档 - Canvas API
  • MDN Web文档 - createPattern()方法
作者最新文章