zoukankan      html  css  js  c++  java
  • js将任意标签转换成图片下载到本地

    一、相关技术及参考网站

    1、html2canvas
    2、canvas标签

    说明

    使用js将html上任意一个标签及其子标签展示的内容生成图片,并下载到本地。

    1、核心是用html2canvas将指定标签元素转换成canvas标签的图表
    2、然后用canvas标签自带的转码功能获取图表的base64地址
    3、最后创建a标签下载base64内容

    二、页面及下载效果

    页面效果

    页面效果

    下载效果

    第一张

    第二张

    三、可运行代码:

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<script src="http://html2canvas.hertzen.com/dist/html2canvas.js"></script>
    		<title></title>
    	</head>
    	<body>
    		<div style=" 148.8px;display: inline-block;">
                            //要下载成图片的标签
    			<div id="pic1" style=" 148.8px;display: inline-block; padding: 10px 0px;">
    				<img id="cavasimg1" src="test.png" style="display: block; 120px;height: 120px; margin-left: auto;margin-right: auto;" />
    				<strong style="display: block;text-align: center;line-height: 1.15;font-size: 12px;">我媳妇儿</strong>
    				<strong style="display: block;text-align: center;line-height: 1.15;font-size: 12px;">22岁</strong>
    			</div>
    			<input type="button" id="btnsavaImg1" value="下载本地图片" onclick="download()" />
    		</div>
    		
    		<div style=" 148.8px;display: inline-block;">
                            //要下载成图片的标签
    			<div id="pic2" style=" 148.8px;display: inline-block; padding: 10px 0px;">
    				<img id="cavasimg2" src="http://pic1.zhimg.com/50/v2-a1daed32cac3a2904997f1f7e0b60d9b_hd.jpg" crossorigin="Anonymous" style="display: block; 120px;height: 120px; margin-left: auto;margin-right: auto;" />
    				<strong style="display: block;text-align: center;line-height: 1.15;font-size: 12px;">我媳妇儿</strong>
    				<strong style="display: block;text-align: center;line-height: 1.15;font-size: 12px;">22岁</strong>
    			</div>
    			<input type="button" id="btnsavaImg2" value="下载url图片" onclick="downloadUrlImg()" />
    		</div>
    	</body>
    
    	<script>
    		//图片在本地或者src是base64编码的情况下可以直接下载含img标签的父级标签
    		function download() {
    			var pic1 = document.getElementById("pic1") //要生成图片的标签
    			//生成canvas标签
    			html2canvas(pic1).then(function(canvas) {	//找到pic元素时,生成canvas元素。
    				var dataURL =canvas.toDataURL("image/png")	 // 获取canvas对应的base64编码
    				restoreImg(dataURL)	//下载canvas图片
    			});
    		}
    		
    		//图片是url时,需要将图片转换成base64进行下载。
    		function downloadUrlImg(){
    			debugger
    			var img = document.getElementById("cavasimg2")
    			var canvas = document.createElement("canvas");
    			canvas.width = img.width;
    			canvas.height = img.height;
    			var ctx = canvas.getContext("2d");
    			ctx.drawImage(img, 0, 0, img.width, img.height);
    			var imgBase64 = canvas.toDataURL("image/png");  // 可选其他值 image/jpeg
    			img.setAttribute("src",imgBase64)
    			
    			var pic2 = document.getElementById("pic2") //要生成图片的标签
    			//生成canvas标签
    			html2canvas(pic2).then(function(canvas) {	//找到pic元素时,生成canvas元素。
    				var dataURL =canvas.toDataURL("image/png")	 // 获取canvas对应的base64编码
    				restoreImg(dataURL)	//下载canvas图片
    			});
    			
    			restoreImg(dataURL)
    		}
    		
    		function restoreImg(dataURL) {
    			debugger
    			let href = dataURL	
    			let a = document.createElement('a') // 创建a标签
    			a.download = "picName" // 设置图片名字
    			a.href = href
    			a.dispatchEvent(new MouseEvent('click'))	//模拟点击进行下载 
    		}
    	</script>
    
    </html>
    
  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/mengfff/p/12427631.html
Copyright © 2011-2022 走看看