js canvas图片添加重复背景水印

/**
	 	* 给图片添加水印
	 	* @memberof DomUtils.
	 	* @param {string} dataUrl - png图片的data url
	 	* @param {string} text - 水印文字
 	*/
	watermarkImage (dataUrl, text, style = {opacity: 0.5, font: '14px serif', fillStyle: 'rgb(227,232,238)'}) {
		return new Promise((resolve, reject) => {
			let targetImage = new Image();
			targetImage.onload = function () {
				let h = targetImage.height,
					w = targetImage.width,
					canvas = Object.assign(document.createElement('canvas'), {width: w, height: h}),
					ctx = canvas.getContext('2d');

				ctx.drawImage(targetImage, 0, 0);

				ctx.globalAlpha = style.opacity;
				ctx.font = style.font;
				ctx.fillStyle = style.fillStyle;

				let fwidth = w / 4,
					fheight = h / 4;

				for (let hh = fheight; hh < h; hh += fheight) {
					for (let ww = fwidth; ww < w; ww += fwidth) {
						ctx.setTransform(1, 0, 0, 1, 0, 0);
						ctx.translate(ww, hh);
						ctx.rotate(-Math.atan(h / w));
						ctx.fillText('text', -fwidth / 2, fheight / 2);
					}
				}

				try {
					canvas.toBlob(blob => {
						resolve(blob);
					});
				} catch (e) {
					console.error('Cannot watermark image with text:', text);
					reject(e);
				}
			};
			targetImage.src = dataUrl;
		})
	}

具体用法:

domToImage.toPng(document.querySelector('.read-template .items')).then(dataUrl => {
				DomUtils.watermarkImage(dataUrl, 'test...').then((blob) => {
					saveAs(blob, '文档.png');
				});
			});

domToImage和saveAs分别为dom-to-image,file-saver库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值