通过自定义指令生成canvas水印原理
- 水印(watermark)是一种容易识别、被夹于纸内,能够透过光线穿过从而显现出各种不同阴影的技术。
实现 - 前端实现的水印基本都是不安全的,可被破解的
- 使用canvas生成base64格式的图片文件,并将其设置为对应元素的背景图片,从而产生水印效果
- 通过绑定vue自定义指令,可以快速实现页面或组件局部水印效果
实现
创建
directives.js
文件// 添加水印 import Vue from 'vue' Vue.directive('watermark', (el, binding) => { function addWaterMarker(str, parentNode, font, textColor) {// 水印文字,父元素,字体,文字颜色 var can = document.createElement('canvas'); parentNode.appendChild(can); can.width = 300; can.height = 200; can.style.display = 'none'; var cans = can.getContext('2d'); cans.rotate(-20 * Math.PI / 180); cans.font = font || "16px PingFang SC"; cans.fillStyle = textColor || "rgba(180, 180, 180, 0.3)"; cans.textAlign = 'left'; cans.textBaseline = 'Middle'; cans.fillText(str, can.width / 3, can.height / 2); parentNode.style.backgroundImage = "url(" + can.toDataURL("image/png") + ")"; } addWaterMarker(binding.value.text, el, binding.value.font, binding.value.textColor) })
main.js 引入directives.js
import '@/utils/directives'
使用
<template>
<div v-watermark="{text:'水印',textColor:'rgba(180, 180, 180, 0.3)'}">
这里是内容区域!
</div>
</template>