html5怎么给图片加水印

来源:图像处理网作者:弥生美月头衔:网络博主
导读:本期聚焦于小伙伴创作的《html5怎么给图片加水印》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《html5怎么给图片加水印》有用,将其分享出去将是对创作者最好的鼓励。

在html5中实现图片水印添加,核心依赖canvas绘图能力,通过加载原始图片、绘制水印内容、导出最终图片三个核心步骤即可完成,整个过程不需要依赖第三方库,原生api就能实现。

html5怎么给图片加水印

实现原理说明

canvas是html5提供的绘图容器,支持加载外部图片资源并绘制到画布上,同时可以在画布上绘制文字、图形等内容。给图片加水印的本质就是先把原始图片绘制到canvas上,再把水印内容绘制到图片上方,最后把canvas的内容导出为新的图片即可。

完整实现步骤

1. 初始化canvas元素

首先在页面中创建canvas元素,设置合适的宽高,后续所有绘制操作都在这个画布上完成。

<canvas id="watermarkCanvas" style="display:none;"></canvas>
<img id="resultImg" alt="带水印的图片">
<input type="file" id="imgInput" accept="image/*">

2. 加载原始图片

通过文件上传或者指定图片地址获取原始图片,等待图片加载完成后再进行后续绘制操作,避免图片未加载完成导致绘制异常。

function loadImage(src) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.onload = () => resolve(img);
    img.onerror = reject;
    img.src = src;
  });
}

3. 绘制图片和水印

先设置canvas的宽高和原始图片一致,然后把原始图片绘制到canvas上,接着设置水印的样式,把水印内容绘制到图片的指定位置。

async function addWatermark(imgSrc, watermarkText) {
  // 加载原始图片
  const originImg = await loadImage(imgSrc);
  // 获取canvas元素和上下文
  const canvas = document.getElementById('watermarkCanvas');
  const ctx = canvas.getContext('2d');
  // 设置canvas宽高为图片宽高
  canvas.width = originImg.width;
  canvas.height = originImg.height;
  // 绘制原始图片
  ctx.drawImage(originImg, 0, 0, originImg.width, originImg.height);
  // 设置水印样式
  ctx.font = '30px Microsoft YaHei';
  ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
  ctx.textAlign = 'right';
  ctx.textBaseline = 'bottom';
  // 绘制水印文字,放在右下角位置
  ctx.fillText(watermarkText, canvas.width - 20, canvas.height - 20);
  // 导出带水印的图片
  return canvas.toDataURL('image/png');
}

4. 绑定触发事件

通过文件上传获取用户选择的图片,调用上面的水印添加方法,把最终生成的带水印图片显示在页面上。

document.getElementById('imgInput').addEventListener('change', async (e) => {
  const file = e.target.files[0];
  if (!file) return;
  const reader = new FileReader();
  reader.onload = async (event) => {
    const imgSrc = event.target.result;
    const resultImgUrl = await addWatermark(imgSrc, '示例水印');
    document.getElementById('resultImg').src = resultImgUrl;
  };
  reader.readAsDataURL(file);
});

注意事项

  • 如果原始图片是跨域资源,需要设置<img>标签的crossOrigin属性为anonymous,否则canvas转出的图片会报错
  • 水印的样式可以根据需求调整,比如修改字体大小、颜色、透明度、位置,也可以绘制图片形式的水印
  • canvas.toDataURL导出的图片是base64格式,如果需要转成文件形式上传,可以把base64转成Blob对象再处理

扩展:图片水印实现

如果需要添加图片形式的水印,只需要把绘制文字的步骤替换成绘制图片即可,示例代码如下:

async function addImageWatermark(imgSrc, watermarkImgSrc) {
  const originImg = await loadImage(imgSrc);
  const watermarkImg = await loadImage(watermarkImgSrc);
  const canvas = document.getElementById('watermarkCanvas');
  const ctx = canvas.getContext('2d');
  canvas.width = originImg.width;
  canvas.height = originImg.height;
  ctx.drawImage(originImg, 0, 0);
  // 绘制图片水印,设置水印宽高为100*100,放在左上角
  ctx.drawImage(watermarkImg, 20, 20, 100, 100);
  return canvas.toDataURL('image/png');
}

html5canvas图片水印水印添加修改时间:2026-06-09 20:39:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。