外部按钮调用ECharts图表的保存为图片操作

外部按钮调用ECharts图表的保存为图片操作

最近使用ECharts库绘制图表,依据需求希望可以把图表设置的保存为图片操作可以在图表外部调用,主要是希望可以和项目之前的下载图片操作界面保持一致。然后上网找了一些方法,有很多,但是我遇到了一个问题就是ECharts中的getConnectedDataURL方法获取的base64编码有可能会很大,会导致下载失败;然后我就想到了利用画布获取base64编码,这样就不会有上边的问题;两种方法我都拿过来了,需要的可以看看。。。

1.第一种echarts自带获取图表的base64编码(getConnectedDataURL);
(这种方式有可能获取的base64编码过大而导致下载失败)

//传递图表容器id
function downloadImpByChart(chartId) {
var myChart = echarts.getInstanceByDom(document.getElementById(chartId));
var url = myChart.getConnectedDataURL({
pixelRatio: 5,  //导出的图片分辨率比率,默认是1
backgroundColor: '#fff',  //图表背景色
excludeComponents:[  //保存图表时忽略的工具组件,默认忽略工具栏
'toolbox'
],
type:'png'  //图片类型支持png和jpeg
});
var $a = document.createElement('a');
var type = 'png';
$a.download = myChart.getOption().title[0].text + '.' + type;
$a.target = '_blank';
$a.href = url;
// Chrome and Firefox
if (typeof MouseEvent === 'function') {
var evt = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: false
});
$a.dispatchEvent(evt);
}
// IE
else {
var html = ''

'<body style="margin:0;">'
'![](' + url + ')'
'</body>';
var tab = window.open();
tab.document.write(html);
}
};

2.利用画布将图形转化成的base64编码就不会产生以上问题。

//chartId:echarts图的id;name:下载图片的名字
    function downloadImpByChart(chartId,name) {
        var url = getFullCanvasDataURL(chartId);
        var link = document.createElement('a');
        link.href = url;
        link.download = name+".png";
        link.click();
    };

    //将图形转成base64的图片
    function getFullCanvasDataURL(divId){
        //将第一个画布作为基准。
        var baseCanvas = $("#"+divId).find("canvas").first()[0];
        if(!baseCanvas){
            return false;
        };
        var width = baseCanvas.width;
        var height = baseCanvas.height;
        var ctx = baseCanvas.getContext("2d");
        //遍历,将后续的画布添加到在第一个上
        $("#"+divId).find("canvas").each(function(i,canvasObj){
            if(i>0){
                var canvasTmp = $(canvasObj)[0];
                ctx.drawImage(canvasTmp,0,0,width,height);
            }
        });
        //获取base64位的url
        return baseCanvas.toDataURL();
    }
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值