精华内容
下载资源
问答
  • html2canvas可以通过纯JS对浏览器端进行截屏,但截图的精确度还有待提高,部分... 这里有个坑,不要下载最高版本的js,有很多坑。我从1.0降下来了。我用的是0.5版本的 这个是我在用的0.5版本: html2canvas....

    html2canvas可以通过纯JS对浏览器端进行截屏,但截图的精确度还有待提高,部分css不可识别,所以在canvas中不能完美呈现原画面样式

    插件地址

    版本号

    在介绍这个插件前先科普一下软件的版本号.

    • Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。
    • Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。
    • α、β、λ常用来表示软件测试过程中的三个阶段,α是第一阶段,一般只供内部测试使用;β是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给特定的用户群来测试使用;λ是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。

    支持的浏览器

    • Firefox 3.5+
    • Google Chrome
    • Opera 12+
    • IE9+
    • Safari 6+

    贴上代码

    html代码结构

    <h2 onclick="aa();">点击复制图片</h2>
    <h2 onclick="bb();">点击下载图片</h2>
    
    
    
    <div id="capture" style="padding: 10px; background: #f5da55">
        <h4 style="color: #000; ">Hello world!</h4>
        <img src="abc.jpg" width="200" height="200"><!-- 图片只能放在当前服务器才能用 -->
    </div>

    js代码结构

    function aa(){
    
    	html2canvas(document.getElementById('capture'), {
            onrendered: function(canvas) {
           		canvas.setAttribute('id','thecanvas');	//添加属性
                document.body.appendChild(canvas);
            },
            background: "#ffffff",		//canvas的背景颜色,如果没有设定默认透明
            logging: true,		//在console.log()中输出信息
        	width: 300,			//图片宽
    		height: 300,		//图片高
            useCORS: true, // 【重要】开启跨域配置
        });
    }
    	 
    function bb(){
    	var oCanvas = document.getElementById("thecanvas");
    
    	/* 参考
    	Canvas2Image.saveAsPNG(oCanvas);  // 这将会提示用户保存PNG图片
    	Canvas2Image.saveAsJPEG(oCanvas); // 这将会提示用户保存JPG图片
    	Canvas2Image.saveAsBMP(oCanvas);  // 这将会提示用户保存BMP图片
    	// 返回一个包含PNG图片的<img>元素
    	var oImgPNG = Canvas2Image.saveAsPNG(oCanvas, true);   
    	// 返回一个包含JPG图片的<img>元素
    	var oImgJPEG = Canvas2Image.saveAsJPEG(oCanvas, true); 
    	                                                       
    	// 返回一个包含BMP图片的<img>元素
    	var oImgBMP = Canvas2Image.saveAsBMP(oCanvas, true); 
    	 
    	// 这些函数都可以接受高度和宽度的参数
    	// 可以用来调整图片大小
    	// 把画布保存成100x100的png格式
    	Canvas2Image.saveAsPNG(oCanvas, false, 100, 100);
    	*/
    
    
    	/*自动保存为png*/
    	// 获取图片资源
    	var img_data1 = Canvas2Image.saveAsPNG(oCanvas, true).getAttribute('src');
    	saveFile(img_data1, 'richer.png');
    }
    
    
    // 保存文件函数
    var saveFile = function(data, filename){
        var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
        save_link.href = data;
        save_link.download = filename;
       
        var event = document.createEvent('MouseEvents');
        event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        save_link.dispatchEvent(event);
    };

    这个插件几点的坑

    • 1、如果你截取的网页中有图片和文字,在本地测试时生成图片时,网页中的图片截取出来竟然是空白?

      (心里在想:什么狗屁插件根本不管用 图片都截取不了)
      原因:程序必须放在服务器下运行,不然的话网页中的图片是出不来的
      html2canvas 只能在服务器中抓取img

    • 2、js的版本问题?

      这个版本必须要用稳定版的,不能用最高的版本,因为那应该是测试版。最好用稳定版的!
      用的版本不对的话,很多功可能用不了。

    展开全文
  • --最终的图片容器--> <img id="jt_img" style="width: 100%;height: 100%;position: absolute;left: 0;top: 0;"/> <!--自己的画布--> <canvas id="ourCanvas" style="position: absolute; left...

    1.html

    <!--最终的图片容器-->
    <img id="jt_img"  style="width: 100%;height: 100%;position: absolute;left: 0;top: 0;"/>
    <!--自己的画布-->
    <canvas id="ourCanvas" style="position: absolute; left: 0;top:0; z-index: -1; opacity: 0"></canvas>
    <!--需要生成图片的html容器-->
    <div class="box" id="jt">
    	<p>哈哈哈哈哈哈哈</p>
    	<img src="1.png"  style="width: 100px;height: 100px;"/>
    </div>

    2.js

    <script src=" https://cdn.bootcss.com/jquery/1.8.3/jquery.js" type="text/javascript" charset="utf-8"></script>
    <!--依赖于html2canvas插件-->
    <script src="html2canvas.js" type="text/javascript"></script>
    <script type="text/javascript">
    	//截图
    	var canvas = document.getElementById("ourCanvas");
    	var width = $(window).width(); //获取dom 宽度
    	var height = $(window).height(); //获取dom 高度
    	var scale = 2;//需要做倍数转化,否则画面会糊掉
    	
    	function InitCanvas() {
    		canvas.width = width * scale;
    		canvas.height = height * scale;
    		canvas.style.width = width + "px";
    		canvas.style.height = height + "px";
    		var context = canvas.getContext("2d");
    		context.scale(scale, scale); //然后将画布缩放,将图像放大两倍画到画布上
    	}
    	//初始化画布
    	InitCanvas();
    
    	$("body").css("height", document.body.clientHeight + "px");
    
    	setTimeout(function() {				
    		setTimeout(function() {
    
    			html2canvas($("#jt")[0], {
    				scale: scale, // 添加的scale 参数
    				canvas: canvas, //自定义 canvas
    				width: width, //dom 原始宽度
    				height: height,
    				useCORS: true // 【重要】开启跨域配置
    
    			}).then(function(canvas) {
    				$("#jt").hide();
    				imgData = canvas.toDataURL("image/jpg");
    				$("#jt_img").attr("src", imgData);
    				
    			});
    		}, 500);
    	}, 500);
    </script>

    3.效果(感觉孩纸蛮酷的)

    4.注意点

    ① 该插件在dom结构隐藏时,会报错,如果存在几个图切换的情况,可通过z-index来控制图片的展示(或者隐藏),不要通过display:block和display:none来控制。如果实在想用建议加个延时器,避免报错;

    ② 在移动端的触屏布局,现在为了适配不同机型的机器,可以通过弹性盒子flex布局的方式,使主体内容位于整个body的垂直居中的位置,建议设计师(即UI)将主要内容设计在750*1206的高度内,注意是所有主要内容,否则会出现一些奇奇怪怪的问题。(嘿嘿,如果感兴趣,可以自己猜猜坑)。

    ③ 事情的好坏是相对的吧,在display:none的部分的内容在使用该插件截屏的过程中,不会截取。(例如你在使用,底部有一排按钮,通过按钮切换不同的场景,以及其他一些按钮进行指令操作,但在截屏的过程中,肯定不需要把底部悬浮的按钮部分也保存在海报里,此时的display:none 使用起来就很给力了)

    ③ 对于底部需要展示开发商的信息,底部还有悬浮的按钮,这种情况,开发商当然不想底部悬浮的按钮遮挡他们的信息,此时可以通过一个盒子包含两块,上边为主题信息同时设置flex:1,下边为另一个包裹按钮的盒子(这个盒子的背景设置为透明的),最外层设置为{width: 100%;height: 100%;display: -webkit-flex;-webkit-flex-direction: column;-webkit-justify-content: center;-webkit-align-items: center;}让里边的两个盒子垂直居中。

    ④ 对于需要垂直排版的文字给文字外边的盒子设置{height: 205px;text-orientation:upright;writing-mode: tb-rl;-webkit-writing-mode: vertical-rl;writing-mode: vertical-rl;line-height: 37px;letter-spacing: 5px;},须设置一个高,其它的一些属性是让纯数字或者纯字母换行的,同时在html2canvas中设置 letterRendering:true, 这样竖排的纯数字或者纯字母才能正常在canvas中换行,否则会出现奇奇怪怪的东西。

    ⑤ 有一个前端比较浅的问题,有时可能也会犯一些小错,例如给一个元素设置height:100%,然后他的父容器又没高度,这样他的高度也不能撑开。

    ⑥ 对于在微信中运行的只需要加 -webkit- 前缀即可,其它的都不需要,如果在在pc端的话,那就需要加各种浏览器的前缀了。

    ⑦ 对于一些纯数字或者纯字母的在正常的横向排版中也需要加word-break: break-all,否则不会换行。

    ⑧ 在一些活动中会有input框,在放回上一页的过程中,一般不清空。当到最后一页返回首页的时候,会清空input框的内容。

    5.几点说明

        ①只是js插件,请前往官方地址下载

                 地址一:https://github.com/niklasvh/html2canvas

                地址二:https://html2canvas.hertzen.com/

        ②推荐博客地址:https://segmentfault.com/a/1190000011478657

        ③ 参数:http://caibaojian.com/html2canvas.html

     

    展开全文
  • 问题描述 两张图片,一张是用户上传的图片,另一张是模板图,中间是透明的,可以制作相框,并保存。使用html2canvas对两个img标签进行截图。... 原因分析 找了半天才知道,如果截图部分包含图片的话,程序必须放...

    问题描述

    两张图片,一张是用户上传的图片,另一张是模板图,中间是透明的,可以制作相框,并保存。使用html2canvas对两个img标签进行截图。在写demo的时候html2canvas没有报错但是所截的是空白,若换成文字就可以。

    原因分析

    找了半天才知道,如果截图部分包含图片的话,程序必须放在服务器下面进行,不然的话就是空图片。

    ##代码实例

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
    	<script src="js/jquery.js"></script>
    	<script src="js/html2canvas.js"></script>
    	<script src="js/canvas2image.js"></script>
    </head>
    <style type="text/css">
    	img{
    		width: 500px;
    		height: 300px;
    		position: fixed;
    	}
    	#div1{
    		height: 500px;
    		width: 100%;
    	}
    	#div2{
    		position: fixed;
    		bottom: 0;
    		background: red;
    	}
    </style>
    <body>
    	<div id="div1">
    		<img id="img1" src="img/01.jpg">
    		<img id="img2" src="img/02.jpg" style="width:300px">
    	</div>
    	<div id="div2"></div>
    </body>
    <script type="text/javascript">
    	html2canvas($('#div1'), {
    	   onrendered: function(canvas) {
    	     var oImgPNG = Canvas2Image.saveAsPNG(canvas, true); 
    	     $('#div1').hide();
    	     $('#div2').html(oImgPNG);
    	  },
    	  width: 500,
    	  height: 500
    	});
    </script>
    </html>
    

    效果展示

    • 没有服务器谷歌浏览器下

    没有服务器谷歌浏览器下

    • 没有服务器火狐浏览器下

    没有服务器火狐浏览器下

    详细信息请戳:http://my.oschina.net/xuwang1993/blog/647282

    转载于:https://my.oschina.net/mayxu/blog/599928

    展开全文
  • 本次技术调研来源于H5项目中的一个重要功能需求:...方案1:将DOM改写为canvas,然后利用canvas的toDataURL方法实现将DOM输出为包含图片展示的data URI 方案2:使用html2canvas.js实现(可选搭配Canvas2Image.js...

    本次技术调研来源于H5项目中的一个重要功能需求:实现微信长按网页保存为截图

    一、实现HTML页面保存为图片

    1.1 已知可行方案

    现有已知能够实现网页保存为图片的方案包括:

    • 方案1:将DOM改写为canvas,然后利用canvas的toDataURL方法实现将DOM输出为包含图片展示的data URI
    • 方案2:使用html2canvas.js实现(可选搭配Canvas2Image.js实现网页保存为图片)
    • 方案3:使用rasterizeHTML.js实现

    1.2 解决方案的选择

    • 方案1:需要手动计算每个DOM元素的Computed Style,然后需要计算好元素在canvas的大小位置等属性。

      方案1难点

      1. 相当于完全重写了整个页面的布局样式,增加了工作量。
      2. 由于canvas中没有的对象概念,对于元素丰富、布局复杂的页面,不易重构。
      3. 所有DOM元素改写进canvas会带来一些困难,例如:难以支持响应式,图片元素清晰度不佳和文字点击区域识别问题等。
    • 方案2:该类功能中Github上stars最多(至今仍在维护),Stack Overflow亦有丰富的讨论。只需简单调用html2canvas方法并设定配置项即可。
    • 方案3:该方案的限制较多,目前仅支持3类可转为canvas的目标格式: 页面url,html字符串和document对象。

    小结html2canvas是目前实现网页保存为图片功能的综合最佳选择。

    1.3 html2canvas的使用方法

    官方GitHub:https://github.com/niklasvh/h...

    以下描述针对html2canvas版本是0.5.0-beta4

    1.3.1 实现保存为图片的第一步:html转为canvas

    基于html2canvas.js可将一个元素渲染为canvas,只需要简单的调用html2canvas(element[, options]);即可。下列html2canvas方法会返回一个包含有<canvas>元素的promise

    html2canvas(document.body).then(function(canvas) {
        document.body.appendChild(canvas);
    });

    1.3.2 实现保存为图片的第二步:canvas转image

    上一步生成的canvas即为包含目标元素的<canvas>元素对象。实现保存图片的目标只需要将canvas转image即可。

    这里的转换方案有2种

    • 方案1:基于原生canvas的toDataURL方法将canvas输出为data: URI类型的图片地址,再将该图片地址赋值给<image>元素的src属性即可
    • 方案2:使用第三方库Canvas2Image.js,调用其convertToImage方法即可(GitHub

    实际上,Canvas2Image.js也是基于canvas.toDataURL的封装,相比原生的canvas API对于转为图片的功能上考虑更为具体(未压缩的包大小为7.4KB),适合项目使用。

    二、生成图片的清晰度优化方案

    2.1 基础的清晰度优化方案

    最终图片的清晰度取决于第一步中html转换成的canvas的清晰度。

    现有解决方案参考;

    基本原理为:
    canvas的属性widthheight属性放大为2倍(或者设置为devicePixelRatio倍),最后将canvas的CSS样式width和height设置为原先1倍的大小。

    例如:希望在html中实际显示的<canvas>宽高分别为160px,90px则可作如下设置

    <canvas width="320" height="180" style="width:160px;height:90px;"></canvas>

    参考上述文档具体的使用案例如下; 

    convert2canvas() {
    
        var shareContent = YourTargetElem; 
        var width = shareContent.offsetWidth; 
        var height = shareContent.offsetHeight; 
        var canvas = document.createElement("canvas"); 
        var scale = 2; 
    
        canvas.width = width * scale; 
        canvas.height = height * scale; 
        canvas.getContext("2d").scale(scale, scale); 
    
        var opts = {
            scale: scale, 
            canvas: canvas, 
            logging: true, 
            width: width, 
            height: height 
        };
        html2canvas(shareContent, opts).then(function (canvas) {
            var context = canvas.getContext('2d');
    
            var img = Canvas2Image.convertToImage(canvas, canvas.width, canvas.height);
    
            document.body.appendChild(img);
            $(img).css({
                "width": canvas.width / 2 + "px",
                "height": canvas.height / 2 + "px",
            })
        });
    }

     

    2.2 进阶的清晰度优化方案

    上述设置可以解决通常情况下图片不清晰的问题,不过探索并没有结束。

    实际在我们的项目中,即使作出2.1节的设置后,大果粒一般的渲染结果依然尴尬。

    下面直接给出3条进一步的优化策略:

    1. 更改百分比布局px布局(如果原先是百分比布局的话)
    2. 关闭canvas默认的抗锯齿设
    3. 设置模糊元素的widthheight为素材原有宽高,然后通过transform: scale进行缩放。这里scale的数值由具体需求决定。

    基本原理

    1. 如果原来使用百分比设置元素宽高,请更改为px为单位的宽高,避免样式二次计算导致的模糊
    2. 默认情况下,canvas的抗锯齿是开启的,需要关闭抗锯齿来实现图像的锐化(MDN: imageSmoothingEnabled )
    3. 除了canvas可以通过扩大2倍宽高然后缩放至原有宽高来提高清晰度,对于DOM中其他的元素也可以使用css样式scale来实现同样的缩放

    例: html2canvas配置

     

    convert2canvas() {
    
        var cntElem = $('#j-sec-end')[0];
    
        var shareContent = cntElem;//需要截图的包裹的(原生的)DOM 对象
        var width = shareContent.offsetWidth; //获取dom 宽度
        var height = shareContent.offsetHeight; //获取dom 高度
        var canvas = document.createElement("canvas"); //创建一个canvas节点
        var scale = 2; //定义任意放大倍数 支持小数
        canvas.width = width * scale; //定义canvas 宽度 * 缩放
        canvas.height = height * scale; //定义canvas高度 *缩放
        canvas.getContext("2d").scale(scale, scale); //获取context,设置scale 
        var opts = {
            scale: scale, // 添加的scale 参数
            canvas: canvas, //自定义 canvas
            // logging: true, //日志开关,便于查看html2canvas的内部执行流程
            width: width, //dom 原始宽度
            height: height,
            useCORS: true // 【重要】开启跨域配置
        };
    
        html2canvas(shareContent, opts).then(function (canvas) {
    
            var context = canvas.getContext('2d');
            // 【重要】关闭抗锯齿
            context.mozImageSmoothingEnabled = false;
            context.webkitImageSmoothingEnabled = false;
            context.msImageSmoothingEnabled = false;
            context.imageSmoothingEnabled = false;
            
            // 【重要】默认转化的格式为png,也可设置为其他格式
            var img = Canvas2Image.convertToJPEG(canvas, canvas.width, canvas.height);
    
            document.body.appendChild(img);
    
            $(img).css({
                "width": canvas.width / 2 + "px",
                "height": canvas.height / 2 + "px",
            }).addClass('f-full');
    
        });
    }

    例: DOM元素样式:


    .targetElem {width: 54px;height: 142px;margin-top:2px;margin-left:17px;transform: scale(0.5)}

    三、含有跨域图片的配置

    由于canvas对于图片资源的同源限制,如果画布中包含跨域的图片资源则会污染画布,造成生成图片样式混乱或者html2canvas方法不执行等问题。

    以下主要解决两类跨域的图片资源:包括已配置过CORS的CDN中的图片资源和微信用户头像图片资源。

    3.1 针对CDN中的图片的配置

    1. 要求CDN的图片配置好CORSCDN配置好后,通过chrome开发者工具可以看到响应头中应含有Access-Control-Allow-Origin的字段。
    2. 开启html2canvasuseCORS配置项。即作如下设置:
    var opts = {useCORS: true};
    
    html2canvas(element, opts);

    注意
    如果没有开启html2canvasuseCORS配置项,html2canvas会正常执行且不会报错,但是不会输出对应的CDN图片
    (已测试同时包含CDN的图片本地图片的资源的页面,但是只有本地图片能够被正常渲染出来)

    3.2 针对微信用户头像的配置

    如果需要将微信平台中的用户头像一并保存为图片,3.1的方案无能为力。可通过配置服务端代理转发(forward)实现,此处不赘述。

    其他注意事项

    1. margin的遮挡问题

    微信中,唤出长按保存图片的菜单要求长按的对象直接是<image>元素,如果<image>元素上方存在遮挡,则不会唤出菜单。
    而事实上,引发遮挡的并不只是非<image>元素,还可能是margin属性。例如:若在页面底部,对一个绝对定位的元素设置了数值很大的margin-top,则margin-top所涉及的区域,均无法长按唤出菜单。解决方案:将margin-top改用为top即可。

    2. 安卓版微信保存图片失败的问题

    canvas2img默认保存图片的格式为png,而在安卓版微信中所生成的图片尽管能长按唤出保存图片的菜单,但是无法正确保存到本地相册。 解决方案:设置canvas2img的生成图片格式配置项为jpeg即可。

    3. JPEG的黑屏问题

    设置canvas2img输出格式为jpeg,会有一定几率导致生成的图片包含大量的黑色块。可能的解决方案:缩减部分图片元素的体积和尺寸大小。

    4. 不能保留动效

    在图片的转化前,必须停止或者删除动效后才能正确渲染出图片,否则生成的图片是破裂的。

    参考文献:

    http://html2canvas.hertzen.com/

    https://segmentfault.com/a/1190000011478657#articleHeader13

     

     

    展开全文
  • 利用Javascript快速保存当前网页中的所有图片 工作中,我经常会用到Windows Script, 因此在我的Blog上有这个专栏,把平时学到看到的记录下来,但是我自己一直没有发表过真正有用的脚本,工作中的那些由于涉及到公司...
  • 在开发过程中,我们可能会遇到一个需求,要求我们保存网页上的图片,当用户点击图片的时候,就可以让用户选择是否下载图片。 在系统自带的Safari浏览器已经实现了该功能,但是iOS开发中我们如果调用UIWebView加载...
  • 本文实例为大家分享了js实现上传图片到服务器的具体代码,供大家参考,具体内容如下html//多张图片上传multiple//原生提交按钮javascript// 定义一个接收转为base64图片的数组let arrayimg=[]var index = 0;...
  • 发现一个很酷的网页,想把它保存下来怎么办? ?? 网上找离线下载工具? 找了半天,没有找到合适的。 决定自己写一个, 我想可能以后会用到。 第一种方法是使用wget方式下载。 比较简单,但是一些高级的自定义...
  • 网页由多个内容组成,前端不好将整个网页保存图片。当然,可以使用canvas进行绘图(canvas语法参考) 网页中存在外链图片资源 解决方案 概述(笔者以Vue为例) 主要使用html2canvas,将页面转成canvas,从而转成...
  • 如上节所说,如果保存整个页面为PDF很简单,因为我们只保存某一区域,然而保存pdf的API中没有类似page.screenshot中clip参数,我的处理方式就是将上一步保存图片转为PDF即可。转换方式很多,我采用 pdfkit 类库...
  • var dataUrl = canvas.toDataURL('image/jpeg', 1.0) //image/jpeg 保存文件类型,图片的格式 0-1,表示生成的图片的质量,取值0到1, $("#images").attr("src", dataUrl); saveFile(dataUrl, 'richer'); ...
  • 保存为MHTML格式,可以重现部分JavaScript功能。(还有Firefox专用的MAFF格式) 使用Scrapbook、Pocket等快照软件,可以重现部分JavaScript功能。 如果希望100%重现,那么最好使用录屏软件进行录像。 作者:asukaid...
  • mht文件之能用IE打开, 但是好处是一个文件包含图片,CSS, javascript等等, 很好. 目录下有源码和可执行文件, 使用的话可以直接执行exe文件, 研究的话就需要Studio 2008打开源代码了. 8分也不多了, 毕竟是努力过...
  • 本次技术调研来源于H5...将整个网页保存图片是一个十分有趣的功能,常见于H5活动页的结尾页分享。以下则是项目中调研和踩坑的一些小结和汇总。 一、实现HTML网页保存图片 1.1 已知可行方案 现有已知能够实现网...
  • 快速保存网页中所有图片的方法

    千次阅读 2006-08-29 16:10:00
    首先打开有图片网页完全打开后,在地址栏输入 程序代码javascript:Ai7Mg6P=;for%20(i7M1bQz=0;i7M1bQz};if(Ai7Mg6P!=){document.write(+Ai7Mg6P+);void(document.close())}else{alert(No%20images!)}回车! 呵呵 ...
  • 1、需求:长按页面中的一部分(里面有动态获取的用户昵称、头像及动态生成的二维码),弹出下载框,点击后将这部分保存图片下载到手机里(如图) 2、分析:由于有动态获取数据,需等DOM元素生成之后,再将这一...
  • 手机评站网今天精心准备的是《怎么保存整个网页》,下面是详解!如何另存整个网页如何另存整个网页...如何另存整个网页1.在手机桌面中找到手机百度,点击打开手机百度,如下图所示。2.在手机百度中找到自己想要另存...
  • 不会随着网页放大而失真,但采用常规截图的方式保存图片,失真无法避免。因此,人们通常采用各种形式的js代码将网页中的svg图保存到本地。本人近期因为一个项目展示的需要。产生了将d3.js绘制的svg图保存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,924
精华内容 22,369
关键字:

js保存网页包括图片