给背景加水印

2019-05-30  本文已影响0人  ThemisHoo
// 配置水印的字体大小,行数,列数等参数,可改为可配置参数
let watermark = {
    id: 'watermark',
    fontSize: '16px',
    rowNum: 3,
    colNum: 6,
    rotate: 25,
    opacity: 0.1
  };
  let setWatermark = (str) => {
    let id = watermark.id;
    if (document.getElementById(id) !== null) {
      document.body.removeChild(document.getElementById(id))
    }
  
    let can = document.createElement('canvas');
    let clientWidth = window.innerWidth || document.documentElement.clientWidth;
    let clientHeight = window.innerHeight || document.documentElement.clientHeight;
    can.width = clientWidth / watermark.rowNum;
    can.height = clientHeight / watermark.colNum;
  
    let cans = can.getContext('2d');
    cans.rotate(-watermark.rotate * Math.PI / 180);
    cans.font = `${watermark.fontSize} Vedana`;
    cans.fillStyle = `rgba(0, 0, 0, ${watermark.opacity})`;
    cans.textAlign = 'left';
    cans.textBaseline = 'Middle';
    cans.fillText(str, 0, can.height);
    let div = document.createElement('div');
    div.id = id;
    div.style.cssText = `
        pointer-events:none;
        top:0;
        left:0;
        position:fixed;
        z-index:500;
        width:${clientWidth}px;
        height:${clientHeight}px;
        background:url( ${can.toDataURL('image/png')}) left top repeat
    `;
    document.body.appendChild(div); // 这里将水印加在了body上
    return id
  };
  // 该方法只允许调用一次
  watermark.setText = (str) => {
    setWatermark(str);
    window.onresize = () => {
      setWatermark(str)
    }
  };
  watermark.remove = () => {
    let id = watermark.id;
    if (document.getElementById(id) !== null) {
      document.body.removeChild(document.getElementById(id))
    }
  };
  watermark.setOptions = (opts) => {
    if (!isJson(JSON.stringify(opts))) return;
    for (let k in opts) {
      watermark[k] = opts[k]
    }
  };
  
  function isJson(str) {
    if (typeof str === 'string') {
      try {
        let obj = JSON.parse(str);
        return !!(obj && typeof obj === 'object');
      } catch (e) {
        console.log('error:' + str + '!!!' + e);
        return false;
      }
    }
  }
  
  export default watermark
import {  Watermark } from './watermark.js';

let canvasImg = Watermark.setText(`水印文字`)
document.getElementById('root').style.background = canvasImg
上一篇下一篇

猜你喜欢

热点阅读