首页 前端知识 使用原生JavaScript代码将HTML保存为图片

使用原生JavaScript代码将HTML保存为图片

2024-07-29 00:07:24 前端知识 前端哥 464 515 我要收藏

背景

有朋友了解了我上篇svg绘制中国象棋棋盘后,想要将其使用代码保存下来,正好今天有时间,顺便给大家介绍一下我的解决方案。

代码

<!DOCTYPE html>
<html>
	<body>

		<h1>My first SVG</h1>

		<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
			<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
		</svg>
		<br />
		<button onclick="svgSave()">Svg保存</button>
		<button onclick="notSvgSave('jpeg')">Jpeg保存</button>
		<button onclick="notSvgSave('png')">Png保存</button>
	</body>
</html>

<script type="text/javascript">
	function svgSave() {
		let svg = document.querySelector("svg").outerHTML;
		let src = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)));

		let a = document.createElement("a");
		a.href = src;
		a.download = "result.svg";
		a.click();
	}

	function notSvgSave(type) {
		let svg = document.querySelector("svg").outerHTML;
		let src = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)));

		let img = document.createElement("img");
		img.src = src;

		img.onload = () => {
			let canvas = document.createElement("canvas");
			let cxt = canvas.getContext("2d");
			canvas.width = img.width;
			canvas.height = img.height;
			cxt.drawImage(img, 0, 0, img.width, img.height);
			let url = canvas.toDataURL(`image/${type}`, 1.0);

			let a = document.createElement("a");
			a.href = url;
			a.download = `result.${type}`;
			a.click();
		}
	}
</script>

解析

svg标签内代码从菜鸟教程第一课中拷贝而来。

svg直接下载方案:将其转为base64码,自建a标签并模拟点击进行下载

svg转jpeg或png再下载方案:将其转为base64码后,自建img标签并设置src为base64码,为img标签加载事件添加处理函数,函数内容为:将img图片绘制到一个自建canvas标签中,并转为jpeg或png的base64码,再自建a标签并模拟点击进行下载

有兴趣深入了解的小伙伴请重点学习 encodeURIComponent、unescape、btoa这三个函数,其使用方法和细节这里不展开赘述。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/14495.html
标签
评论
发布的文章

Unity数据持久化之Json

2024-08-10 22:08:00

simdjson 高性能JSON解析C 库

2024-08-10 22:08:00

npm常用命令详解(一)

2024-08-10 22:08:34

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!