需求及前提:html
(1) 将web网页展现的某些图表,导出为图片保存;git
(2) 图表多是Canvas的(使用H5绘图组件生成的或者本身Draw的),也多是div组合出来的;es6
方案1:github
使用html2canvas(某些浏览器须要引入依赖es6-promise.min.js,由于木有Promise对象) web
https://github.com/niklasvh/html2canvascanvas
https://github.com/stefanpenner/es6-promise数组
和 canvas2imagepromise
https://github.com/hongru/canvas2image/blob/master/canvas2image.js浏览器
示例:app
$("#snap_btn_001").on("click",function(event){
event.preventDefault();
var w = $("#id001").width();
var h = $("#id001").height();
//这一坨代码是为了解决截图不清晰的问题,可是ratio应该根据浏览器的分辨率计算,这里先写死的一个数值
var ratio = 2;
//要将 canvas 的宽高设置成容器宽高的 Ratio 倍
var canvas = document.createElement("canvas");
canvas.id = "mycanvas";
canvas.width = w * ratio;
canvas.height = h * ratio;
canvas.style.width = w + "px";
canvas.style.height = h + "px";
var context = canvas.getContext("2d");
//而后将画布缩放,将图像放大ratio倍画到画布上
context.scale(ratio,ratio);
html2canvas(document.getElementById("id001"),{
allowTaint: true,
taintTest: false,
width: w,
height:h,
onrendered: function(canvas) {
var dataUrl = canvas.toDataURL();
var newImg = document.createElement("img");
//newImg.style = "display:none;"; //若是要导出,这儿能够隐藏,而后用canvas2image搞定
newImg.src = dataUrl;
document.body.appendChild(newImg);
}
});
});
参考文章:
http://blog.csdn.net/fengyao1995/article/details/51842486
方案2:
对于使用H5绘图组件的,多数组件自己提供了导出为图片的方法,调用或者配置便可。
例如echarts js 的saveAsImgae配置。
方案1和2对比:
(1) 方案1 使用范围广,若是图表包含了自定义的div,也能截图导出,可是清晰度有问题(根源是啥,须要研究html2canvas源码,我没研究,可是我相信能够解决。)
(2) 方案2,使用组件自身的导出,因为自己就是canvas了,少了前一步的转换,清晰度不错,就是只能导出组件自身的图表。