Echarts是一个基于JavaScript的可视化工具库,可以帮助开发者快速构建出各种酷炫的图表。而对于开发者而言,将Echarts图表保存为图片是一个非常常见的需求。本文将从多个方面进行详细阐述,帮助读者了解如何实现Echarts图表的图片保存。
一、Echarts保存为图片位置
在Echarts中,我们可以通过调用echartsInstance.getConnectedDataURL()方法来实现将图表保存为base64格式的图片。而这个方法的位置取决于我们在代码中是如何定义Echarts实例的。例如,如果我们是通过在HTML文件中定义一个div元素,再通过JavaScript代码调用echarts.init()方法来创建实例,那么我们可以在JavaScript代码中直接调用echartsInstance.getConnectedDataURL()方法来实现图片保存。具体实现代码如下:
//html代码
//JavaScript代码
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
// 绘制图表
myChart.setOption({...});
// 保存为图片
var imgBase64 = myChart.getConnectedDataURL();
如果我们是通过Vue或React等框架来实现Echarts图表的创建,那么我们可以通过refs来获取到实例,并调用getConnectedDataURL()方法进行图片保存。具体实现代码如下:
//Vue代码:
<script>
import echarts from 'echarts';
export default {
mounted() {
var chartDom = this.$refs.chart;
var myChart = echarts.init(chartDom);
myChart.setOption({...});
var imgBase64 = myChart.getConnectedDataURL();
}
}
</script>
//React代码:
import React, { Component } from 'react';
import echarts from 'echarts';
class Chart extends Component {
constructor(props) {
super(props);
this.chartRef = React.createRef();
}
componentDidMount() {
var chartDom = this.chartRef.current;
var myChart = echarts.init(chartDom);
myChart.setOption({...});
var imgBase64 = myChart.getConnectedDataURL();
}
render() {
return (
);
}
}
export default Chart;
二、Echarts保存为图片发送给后端
实现将Echarts图表保存为图片后,我们需要将这张图片发送给后端进行保存或作为邮件、微信等方式的附件发送。我们可以通过将图片的base64字符串传递给后端来实现图片的发送。具体实现方式跟自己所使用的后端语言有关,这里以Node.js为例进行代码示例:
const fs = require('fs');
const path = require('path');
const http = require('http');
http.createServer(function(req, res) {
//获取前端传递的图片base64字符串
var imgData = req.body.imgData;
//去掉前缀后转为buffer数据
var base64Data = imgData.replace(/^data:image\/\w+;base64,/, '');
var dataBuffer = Buffer.from(base64Data, 'base64');
//将buffer数据保存为图片
fs.writeFileSync(path.join(__dirname, 'test.png'), dataBuffer);
//返回成功信息
res.end(JSON.stringify({ success: true }));
}).listen(3000);
console.log('server started');
三、Echarts保存图片清晰度
在将Echarts图表保存为图片的过程中,我们还需要考虑图片的清晰度。默认情况下,Echarts的图表保存为的图片清晰度并不高,这可能会影响到我们后续处理这张图片的效果。实现提高Echarts图表保存出来的图片清晰度的方式有很多种,下面列举几种常用的实现方式。 1. 将Echarts图表放大后再进行保存,这样能够提高图片的分辨率,从而提升图片的清晰度。 2. 调整Echarts实例的pixelRatio参数,可以直接影响到图表生成的图片的清晰度。例如,将pixelRatio设置为2,可以将图片的分辨率直接提高到原来的两倍。具体实现代码如下:
var myChart = echarts.init(chartDom, null, { pixelRatio: 2 });
3. 在调用getConnectedDataURL()方法时,可以通过传递额外的参数来影响到图片的清晰度,例如通过传递参数type: 'png'、pixelRatio: 2等来控制图片的生成效果。
四、Echarts生成图片保存
除了将Echarts图表保存为base64格式的图片,我们还可以通过其他方式将生成的图表进行保存,例如直接保存为.png、.jpg等格式的图片文件。实现方式也很简单,我们可以将图片的base64字符串转换为blob对象,然后再将blob对象转换为文件进行保存。具体实现代码如下:
//将base64字符串转换为blob对象
var blob = dataURItoBlob(imgBase64);
//将blob对象转换为文件进行保存
saveAs(blob, 'test.png');
//将base64字符串转换为blob对象的方法
function dataURItoBlob(dataURI) {
var byteString = atob(dataURI.split(',')[1]);
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ab], { type: 'image/png' });
}
五、Echarts导出图片
在实现将Echarts图表保存为图片的过程中,我们还可以考虑将多张Echarts图表导出为一个PDF文档或者一个带多个图表的HTML文件。对于实现将多个图表导出的需求,我们可以使用Echarts官方提供的echarts-gl组件来实现。具体实现方式请参见官方文档:https://www.echartsjs.com/examples/zh/editor.html?c=gl-multiple-pie。
六、Echarts生成图片
在实际开发中,我们还可以通过Echarts提供的export功能来实现将图表保存为图片。Echarts官方提供了一个export功能的扩展库,可以通过引入该库实现将图表保存为.png、.svg等格式的图片文件。具体使用方式请参见Echarts官方文档:https://echarts.apache.org/examples/zh/editor.html?c=doc-example/export。
结束语
到此为止,本文已经详细阐述了如何将Echarts图表保存为图片的多种实现方式。通过综合运用这些实现方式,开发者可以轻松实现将Echarts图表保存为图片,并进行后续的处理、上传、导出等操作,从而达到更加自由灵活的可视化效果。