您的位置:

Echarts保存为图片的详细阐述

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图表保存为图片,并进行后续的处理、上传、导出等操作,从而达到更加自由灵活的可视化效果。