
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>水印案例</title><style>.box {width: 500px;height: 500px;border: 1px solid #eee;}</style>
</head>
<body><div class="box"><h1>hello world!</h1><p onclick="console.log('123')">我是水印保护的内容</p></div><div class="box"></div>
<script type="text/javascript">
function createWatermark({texts = ["watermark", "By slongzhang"],fontSize = 12,opacity = 0.1,angle = -20,gapX = 125,gapY = 100,zIndex = 999,id = "slongzhang@126.com",mount = void 0
} = {}) {if (Array.isArray(texts) || typeof texts === "string" && !isImageLike(texts)) {if (typeof texts === "string") texts = [texts];const canvas = document.createElement("canvas");const ctx = canvas.getContext("2d");canvas.width = gapX;canvas.height = gapY;ctx.clearRect(0, 0, gapX, gapY);ctx.globalAlpha = opacity;ctx.font = `${fontSize}px sans-serif`;ctx.fillStyle = "black";ctx.textAlign = "center";ctx.textBaseline = "middle";ctx.translate(gapX / 2, gapY / 2);ctx.rotate((angle * Math.PI) / 180);texts.forEach((t, i) => {ctx.fillText(t, 0, i * (fontSize + 5));});appendWatermark(canvas.toDataURL());return;}loadImage(texts, (img) => {const canvas = document.createElement("canvas");canvas.width = gapX;canvas.height = gapY;const ctx = canvas.getContext("2d");ctx.clearRect(0, 0, gapX, gapY);ctx.globalAlpha = opacity;ctx.translate(gapX / 2, gapY / 2);ctx.rotate((angle * Math.PI) / 180);const scale = Math.min(gapX / img.width, gapY / img.height);const newWidth = img.width * scale;const newHeight = img.height * scale;ctx.drawImage(img, -newWidth / 2, -newHeight / 2, newWidth, newHeight);appendWatermark(canvas.toDataURL());});function appendWatermark(base64Url) {if (!base64Url) return;const div = document.createElement("div");div.style.pointerEvents = "none";div.style.top = "0";div.style.left = "0";div.style.width = "100%";div.style.height = "100%";div.style.position = "fixed";if (zIndex) div.style.zIndex = zIndex;div.style.backgroundImage = `url('${base64Url}')`;let mountType = typeof mount;if (mountType === "undefined") {mount = document.body;} else if (mountType === "string") {mount = document.querySelector(mount);}if (mount && mount instanceof Element) {id = typeof id === "string" ? encodeURI(id) : false;if (id) {const old = mount.querySelector(`div[data-watermark-id="${id}"]`);if (old) old.remove();div.setAttribute("data-watermark-id", id);}if (mount !== document.body) {positionS2T(mount);div.style.position = "absolute";}mount.appendChild(div);}}
}
function isImageLike(input) {if (input instanceof HTMLImageElement) return true;if (typeof input === "string") {return /^data:[a-z]+\/[0-9a-z\-\.\+]+;base64,/.test(input) || /^https?:\/\//.test(input);}return false;
}
function loadImage(source, callback) {if (source instanceof HTMLImageElement) {if (source.complete) {callback(source);} else {source.onload = () => callback(source);}return;}if (typeof source === "string") {const img = new Image();img.crossOrigin = "anonymous"; img.onload = () => callback(img);img.src = source;}
}
function positionS2T(parentElement) {if (parentElement instanceof Element &&window.getComputedStyle(parentElement).position === "static") {parentElement.style.position = "relative";}
}</script><script type="text/javascript">
var b64 = `base64的图片资源或图片超链接`;
</script>
<script type="text/javascript">createWatermark({texts: 'slong test', fontSize: 12,opacity: 0.2,angle: -25,gapX: 125,gapY: 100,mount: '.box'});var imgEl = document.createElement('img');imgEl.src = b64;var r = .6createWatermark({texts: imgEl, fontSize: 12,opacity: 0.2,angle: -25,gapX: 125 * r,gapY: 100 * r,mount: document.querySelectorAll('.box')[1]});</script>
</body>
</html>