前端生成水印之SVG方式
SVG:可缩放矢量图形(英语:Scalable Vector Graphics,SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。 SVG由W3C制定,是一个开放标准。
- (function () {
- // svg 实现 watermark
- function __svgWM({
- container = document.body,
- content = '请勿外传',
- width = '300px',
- height = '200px',
- opacity = '0.2',
- fontSize = '20px',
- zIndex = 1000
- } = {}) {
- const args = arguments[0];
- const svgStr = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${width}">
- <text x="50%" y="50%" dy="12px"
- text-anchor="middle"
- stroke="#000000"
- stroke-width="1"
- stroke-opacity="${opacity}"
- fill="none"
- transform="rotate(-45, 120 120)"
- style="font-size: ${fontSize};">
- ${content}
- </text>
- </svg>`;
- const base64Url = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(svgStr)))}`;
- const __wm = document.querySelector('.__wm');
- const watermarkDiv = __wm || document.createElement("div");
- const styleStr = `
- position:absolute;
- top:0;
- left:0;
- width:100%;
- height:100%;
- z-index:${zIndex};
- pointer-events:none;
- background-repeat:repeat;
- background-image:url('${base64Url}')`;
- watermarkDiv.setAttribute('style', styleStr);
- watermarkDiv.classList.add('__wm');
- if (!__wm) {
- container.style.position = 'relative';
- container.insertBefore(watermarkDiv, container.firstChild);
- }
- const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
- if (MutationObserver) {
- let mo = new MutationObserver(function () {
- const __wm = document.querySelector('.__wm');
- // 只在__wm元素变动才重新调用 __canvasWM
- if ((__wm && __wm.getAttribute('style') !== styleStr) || !__wm) {
- // 避免一直触发
- mo.disconnect();
- mo = null;
- __svgWM(JSON.parse(JSON.stringify(args)));
- }
- });
- mo.observe(container, {
- attributes: true,
- subtree: true,
- childList: true
- })
- }
- }
- if (typeof module != 'undefined' && module.exports) { //CMD
- module.exports = __svgWM;
- } else if (typeof define == 'function' && define.amd) { // AMD
- define(function () {
- return __svgWM;
- });
- } else {
- window.__svgWM = __svgWM;
- }
- })();
参考: http://web.jobbole.com/94960/
前端生成水印之SVG方式的更多相关文章
- 网页加水印 svg 方式
/** *网页加水印 svg 方式 * * @export * @param {*} [{ * container = document.body, * content = '请勿外传', * wid ...
- .NET中生成水印更好的方法
.NET中生成水印更好的方法 为了保护知识产权,防止资源被盗用,水印在博客.网店等场景中非常常见. 本文首先演示了基于System.Drawing.Image做正常操作.然后基于Direct2D/WI ...
- Vue——前端生成二维码
与后端生成二维码相比,前端生成二维码更具有灵活性,下面就介绍两种前端生成二维码的方式,两种方式相比之下,vue-qr比qrcode多了一个再中间添加logo的功能. 方式一:qrcode npm np ...
- 前端生成分享海报兼容H5和小程序
### 移动端分享海报生成 最近做项目需求是生成商品分享海报,并且保存到手机中要兼容H5和小程序<br> 与后端同学沟通后,海报在前端生成最省性能和有较好的交互体验,先看做好的效果
- 前端生成PDF,让后端刮目相看
PDF 简介 PDF 全称Portable Document Format (PDF)(便携文档格式),该格式的显示与操作系统.分辨率.设备等因素没有关系,不论是在Windows,Unix还是在苹果公 ...
- WebGIS中等值线前端生成绘制简析
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 等值线是GIS制图中常见的功能,一般有两种思路:一种是先进行插 ...
- 前端生成二维码 - Javascript生成二维码(QR)
前段时间项目中需要动态的生成二维码,经过评估,前后端生成都可以.但后端生成会有两个问题: 没有找到正规发布出来的后端开源库. 二维码图片,会随着商品的增加而不断变多. 基于以上两个问题,决定在前端生成 ...
- H5纯前端生成Excel表格
H5纯前端生成Excel表格方法如下: <!DOCTYPE html> <html> <head> <title></title> < ...
- Flink assignAscendingTimestamps 生成水印的三个重载方法
先简单介绍一下Timestamp 和Watermark 的概念: 1. Timestamp和Watermark都是基于事件的时间字段生成的 2. Timestamp和Watermark是两个不同的东西 ...
随机推荐
- c++连续读取未知个数的数字
#include <iostream> using namespace std; int main() { int n; ]; ,count=; while(cin>>n){ ...
- STSdb数据库的实现使用类
STSdb 3.5是一个开源的key-value存储形式的数据库,它是用微软.net框架C#语言编写的.STSdb 3.5尤其使用于紧急任务或实时系统,如:股市交易,电子通信,实验室数据等,它的主要功 ...
- WebAPI调用笔记
前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于Http协议的Get.Po ...
- day2作业
购物车(两个程序)用户入口1商品信息存在文件里2已购商品,余额记录商家入口2可以添加商品,修改商品价格
- 老男孩Python九期全栈学习笔记4
---恢复内容开始--- day4 1.作业回顾 1.有变量name = 'aleX leNb',完成如下操作: 1)移除 name 变量对应的值两边的空格,并输出处理结果 2)移除 name 变量左 ...
- 20175212童皓桢 Java实验二-面向对象程序设计实验报告
20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...
- Oracle中 “ORA-14551: 无法在查询中执行 DML 操作” 如何解决
在编写一个数据库函数时,方法实现需要查询后进行修改,出现ora-14551的错误 create or replace function fun_DxcBillSn(tabType integer,ta ...
- Ubuntu 18.04 下 Redis 环境搭建
一.安装 Redis ① 下载 wget http://download.redis.io/releases/redis-3.2.8.tar.gz ② 解压 tar -zxvf redis-3.2.8 ...
- elixir东游记:实现一个简单的中文语句解析
备份:https://zhuanlan.zhihu.com/p/46030123 代码地址:github:pyzh/gdpl-ex.poc-1 原语句是:List1为'12332234':记a为Lis ...
- asp解码.net传参
get传参时 asp默认使用gbk解码?了解的朋友指点下,谢谢 .net向asp传参时注意urlencode加密编码使用gb2312 附:任何语言的数据交互都要确保接收双方的编码一致