前端添加背景水印

926 阅读1分钟

前言

为了防止信息泄露或知识产权被侵犯,在web的世界里,对于页面和图片等增加水印处理是十分有必要的。下面分享一种简单的前端添加页面水印的方式。

技术解析

希望实现的效果是在需要加载水印的盒子上添加水印信息。首先想到的方案就是添加一个新的盒子,通过canvas创建一张含有水印信息的背景图片,填充满想要添加水印的元素。然后将水印设置为背景图。

实现方案

实现代码


//配置示例
{
    container = document.body, 
    width = '200px',   //水印宽度
    height = '148px',  //水印宽度
    textAlign = 'content', //水印方向
    textBaseline = 'middle', 
    font = '16px Microsoft Yahei', //水印字体格式
    content = '水印', //水印内容
    rotate = '45', //字体倾斜角度
    zIndex = 10000,
}
//实现代码
const canvasInfo = function({
   container = document.body,
   width = '200px',
   height = '148px',
   textAlign = 'content',
   textBaseline = 'middle',
   font = '16px Microsoft Yahei',
   content = '水印',
   rotate = '45',
   zIndex = 10000,
} = {}) {
   const canvas = document.createElement('canvas'); //创建canvas
   canvas.setAttribute('width', width); //添加canvas属性
   canvas.setAttribute('height', height);
   const ctx = canvas.getContext('2d');
   ctx.textAlign = textAlign;
   ctx.textBaseline = textBaseline;
   ctx.font = font;
   ctx.rotate((Math.PI / 180) * rotate); //旋转角度
   ctx.fillText(content, parseFloat(width) / 2, parseFloat(height) / 2);
   const base64Url = canvas.toDataURL()
   const watermarkDiv = document.createElement('div');
   const styleStr =
	` position:fixed;
	  top:0;
	  left:0;
	  bottom:0;
	  right:0;
	  width:100%;
	  height:100%;
	  z-index:${zIndex};
	  background-image:url('${base64Url}');
	  opacity: 0.1; 
	 `;
   watermarkDiv.setAttribute('style', styleStr);//添加div属性
   container.insertBefore(watermarkDiv, container.firstChild); //向列表中插入
		}
   canvasInfo()

展示效果

image.png

总结

直接通过Canvas绘画,避免了在水印密度较大的情况下大量DOM元素的创建与添加。