后台管理系统-canvas添加水印

展示
后台管理系统-canvas添加水印_第1张图片

第一步:untils文件---->创建一个shuiying.js
第二步:shuiying.js----->代码

const watermark = {}

const setWatermark = (str, str1) => {
  const id = '1.23452384164.123412415'

  if (document.getElementById(id) !== null) {
    document.body.removeChild(document.getElementById(id))
  }
 // 构建canvas
  const can = document.createElement('canvas')
  can.width = document.documentElement.clientWidth
  can.height = document.documentElement.clientHeight

  const cans = can.getContext('2d')
  var drawTxt = '' // 当前绘制的内容
  var drawLine = 1 // 第几行开始绘制
  var drawIndex = 0 // 当前绘制内容的索引
  var lineMaxWidth = 100
  var drawX = -100
  var drawY = 395
  var lineNum = 10
  // console.log(str)
  // 判断内容是否可以一行绘制完毕      布局
  if (cans.measureText(str).width <= lineMaxWidth) {
    cans.fillText(str.substring(drawIndex, i), drawX, drawY)
  } else {
    for (var i = -100; i <= str.length; i++) {
      cans.rotate((30 * Math.PI) / 180) // 水印初始偏转角度
      cans.font = '18px 宋体'
      cans.fillStyle = '#888888'
      cans.lineHeight = '40px'
      cans.textAlign = 'left'
      cans.globalAlpha = 0.36
      cans.textBaseline = 'Middle'
      cans.fillText(str, -100, i * -55)
      cans.rotate((-30 * Math.PI) / 180) // 把水印偏转角度调整为原来的,不然他会一直转
    }
  }
  const div = document.createElement('div')
  div.id = id
  div.style.pointerEvents = 'none'
  div.style.top = '0px'
  div.style.left = '0px'
  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
}

// 该方法只允许调用一次
watermark.set = (str) => {
  let id = setWatermark(str)
  setInterval(() => {
    if (document.getElementById(id) === null) {
      id = setWatermark(str)
    }
  }, 500)
  window.onresize = () => {
    setWatermark(str)       //创建
  }
}

const outWatermark = (id) => {
  if (document.getElementById(id) !== null) {
    const div = document.getElementById(id)
    div.style.display = 'none'
  }
}
watermark.out = () => {
  const str = '1.23452384164.123412415'
  outWatermark(str)    // 销毁
}

export default watermark

第三步:main.js引入

import watermark from './utils/shuiying'
router.afterEach((item) => {
  if (item.path == '/login') {
    watermark.out()
  } else {
    var date = new Date(new Date()).toLocaleDateString()
    const test = '超级管理员' +'12655485694'     //水印显示的文字信息
    var tests = ''
    for (var i = 0; i < 26; i++) {
      tests += test + '   '
    }
    watermark.set(tests)
  }
})

第二种布局
后台管理系统-canvas添加水印_第2张图片

shuiying.js代码

let watermark = {}

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

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

  let can = document.createElement('canvas')
  can.width = 300
  can.height = 230

  let cans = can.getContext('2d')
   cans.rotate(25 * Math.PI / 150)
  cans.font = '18px Vedana'
  cans.fillStyle = '#cccccc'
  cans.globalAlpha = 0.4;
  cans.textAlign = 'left'
  cans.textBaseline = 'Middle'
  cans.fillText(str,40,70)
  
  cans.font = '20px Vedana'
  cans.fillStyle = '#999999'
  cans.fillText(str1,15,2)

  let div = document.createElement('div')
  div.id = id
  div.style.pointerEvents = 'none'
  div.style.top = '0px'
  div.style.left = '0px'
  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
}

// 该方法只允许调用一次
watermark.set = (str,str1) => {
  let id = setWatermark(str,str1)
  setInterval(() => {
    if (document.getElementById(id) === null) {
      id = setWatermark(str,str1)
    }
  }, 500)
  window.onresize = () => {
    setWatermark(str,str1)
  }
}

const outWatermark = (id) => {
  if (document.getElementById(id) !== null) {
    const div = document.getElementById(id)
    div.style.display = 'none'
  }
}
watermark.out = () => {
  const str = '1.23452384164.123412415'
  outWatermark(str)
}

export default watermark

main.js

import watermark from './utils/shuiying'
router.afterEach((item) => {
  if (item.path == '/login') { 
    watermark.out()
  } else {
    var date = new Date(new Date()).toLocaleDateString()
    watermark.set(2022/11/28+' '+'超级管理员'+'  '+'112345646512','超级管理员'+'admin'+'112345646512'
  }
}) 

看看哪种更适合你,欢迎留言

你可能感兴趣的:(前端,javascript,前端,html)