vue 项目加水印---canvas画图法

发布时间 2023-08-23 15:57:51作者: 写代码的马小跳

搬运 蛙蛙 大佬的文章(做了写自己的补充) 文章链接:https://segmentfault.com/a/1190000022055867,怕以后找不到了

一:创建watermark.js文件

/**  水印添加方法  */

let setWatermark = (str1, str2) => {
  let id = '1.23452384164.123412415'

  if (document.getElementById(id) !== null) {
    document.body.removeChild(document.getElementById(id))
  }

  let can = document.createElement('canvas')
  // 设置canvas画布大小
 // 如果内容比较长,可以调节画布的宽度以实现 
  can.width = 150 
  can.height = 80

  let cans = can.getContext('2d')
// 内容比较长的时候,把画布宽度调大,但是有旋转,会导致内容展示不全,这个时候,调整旋转角度(调小一点)即可解决 cans.rotate(
-20 * Math.PI / 180) // 水印旋转角度 cans.font = '15px Vedana' cans.fillStyle = '#666666' cans.textAlign = 'center' cans.textBaseline = 'Middle' cans.fillText(str1, can.width / 2, can.height) // 水印在画布的位置x,y轴 cans.fillText(str2, can.width / 2, can.height + 22) let div = document.createElement('div') div.id = id div.style.pointerEvents = 'none' div.style.top = '40px' div.style.left = '0px' div.style.opacity = '0.15' div.style.position = 'fixed' div.style.zIndex = '100000' div.style.width = document.documentElement.clientWidth + 'px' div.style.height = document.documentElement.clientHeight + 'px' div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat' document.body.appendChild(div) return id }
//页面大小变化之后,改变水印div的大小 (解决用户改变页面大小之后,水印覆盖不全的情况)
  window.addEventListener('resize', function () {
    const id = '1.23452384164.123412415'
    if (document.getElementById(id) !== null) {
      const div = document.getElementById(id)
      div.style.width = document.documentElement.clientWidth + 'px'
      div.style.height = document.documentElement.clientHeight + 'px'
    }
  });

// 添加水印方法 export const setWaterMark = (str1, str2) => { let id = setWatermark(str1, str2) if (document.getElementById(id) === null) { id = setWatermark(str1, str2) } } // 移除水印方法 export const removeWatermark = () => { let id = '1.23452384164.123412415' if (document.getElementById(id) !== null) { document.body.removeChild(document.getElementById(id)) } }

 

二:vue项目中直接引用

import { removeWatermark, setWaterMark } from '@/common/watermark.js'
mounted() {
    setWaterMark('写代码的马小跳', '2023-08-23');
},
destroyed() {
    removeWatermark();
},

 三:效果如图: