Echarts图表导出为图片的3种方法总结
作者:桌面漫游时间:2026-10-30 21:12:23浏览:301
本文总结了将Echarts图表导出为图片的三种常用方法:利用html2canvas对DOM元素进行截图、调用Echarts官方提供的getDataURL接口获取图片数据,以及通过toolbox配置内置的保存按钮。文章提供了完整的代码示例与安装步骤,帮助开发者根据实际需求选择最合适的导出方案,解决前端图表保存问题。

使用 html2canvas 对 DOM 元素截图
第一种方案是利用 html2canvas 库对包含图表的DOM元素进行截图。
首先需要安装该依赖库。
npm install html2canvas如果使用 yarn 包管理器,执行以下命令进行安装:
yarn add html2canvas在项目中引入 html2canvas 模块。
import html2canvas from "html2canvas"接下来编写具体的导出逻辑代码。
// 导出多张图表为一张图片
// dmo元素里的内容转换为canvas,并将canvas下载为图片
const download = () => {
// 转换成canvas
html2canvas(document.getElementById("echarts")).then(function (canvas) {
var img = canvas
.toDataURL("image/png")
.replace("image/png", "image/octet-stream");
// 创建a标签,实现下载
var creatIMg = document.createElement("a");
creatIMg.download = "图表.png"; // 设置下载的文件名,
creatIMg.href = img; // 下载url
document.body.appendChild(creatIMg);
creatIMg.click();
creatIMg.remove(); // 下载之后把创建的元素删除
});
};调用 Echarts getDataURL 方法
第二种方案是直接调用 Echarts 官方文档中提供的 getDataURL 方法。
// 导出单个图表图片
function Export() {
var img = new Image();
// pieMyChart1 要导出的图表
img.src = pieMyChart1.value.getDataURL({
type: "png",
pixelRatio: 1, //放大2倍
backgroundColor: "#fff",
});
img.onload = function () {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/png");
var a = document.createElement("a");
var event = new MouseEvent("click");
a.download = "图片.png" || "下载图片名称";
// 将生成的URL设置为a.href属性
a.href = dataURL;
// 触发a的单击事件
a.dispatchEvent(event);
a.remove();
};
}利用 Echarts 内置 toolbox 导出
第三种方案则是利用 Echarts 内置的 toolbox 功能,通过配置保存按钮实现导出。
toolbox: {
show: true,
orient: "vertical",
left: "right",
top: "center",
feature: {
saveAsImage: { show: true }, // 保存图表
},
},以下是包含上述三种方法的完整代码示例。
<template>
<el-scrollbar>
<div style="padding: 10px 10px 0">
<el-button type="primary" @click="refresh">刷新</el-button>
<el-button @click="download">下载</el-button>
<el-button @click="Export">导出pie</el-button>
</div>
<el-divider />
<div id="echarts">
<div class="about" id="main"></div>
<div class="about" id="pie"></div>
</div>
</el-scrollbar>
</template>
<script setup>
import { ref, getCurrentInstance, onMounted } from "vue";
import html2canvas from "html2canvas";
const { appContext } = getCurrentInstance();
const { $echarts } = appContext.config.globalProperties;
onMounted(() => {
setEcharts();
});
const pieMyChart1 = ref(null);
const setEcharts = () => {
// 基于准备好的dom,初始化echarts实例
var myChart = $echarts.init(document.getElementById("main"));
// 绘制图表
myChart.setOption({
title: {
text: "ECharts 入门示例",
},
tooltip: {},
xAxis: {
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
axisTick: {
// 坐标轴刻度标签
show: false,
},
},
yAxis: {
type: "value", // 类型数值轴
min: 0,
max: 40,
splitNumber: 8, // 坐标轴的分割段数
axisLine: {
show: true,
},
axisTick: {
show: false, // 隐藏刻度
},
},
series: [
{
name: "销量",
type: "bar",
label: {
show: true,
fontSize: 16,
},
data: [5, 20, 36, 10, 10, 20],
itemStyle: {
borderRadius: 5,
borderWidth: 1,
borderType: "solid",
borderColor: "#73c0de",
},
},
],
});
// 绘制图表
const pieMyChart = $echarts.init(document.getElementById("pie"));
pieMyChart1.value = pieMyChart;
pieMyChart.setOption({
title: {
text: "ECharts 入门示例",
titleStyle: {
lineHeight: 18,
},
top: "0px",
},
tooltip: {},
legend: {
orient: "vertical",
x: "left",
data: ["A", "B", "C", "D", "E"],
top: "80px",
},
toolbox: {
show: true,
orient: "vertical",
left: "right",
top: "center",
feature: {
saveAsImage: { show: true }, // 保存图表
},
},
series: [
{
type: "pie",
data: [
{
value: 335,
name: "A",
},
{
value: 234,
name: "B",
},
{
value: 548,
name: "C",
},
{
value: 500,
name: "D",
},
{
value: 500,
name: "E",
},
],
},
],
});
};
// 页面刷新
const refresh = () => {
location.reload();
};
// 导出多张图表为一张图片
// dmo元素里的内容转换为canvas,并将canvas下载为图片
const download = () => {
// 转换成canvas
html2canvas(document.getElementById("echarts")).then(function (canvas) {
var img = canvas
.toDataURL("image/png")
.replace("image/png", "image/octet-stream");
// 创建a标签,实现下载
var creatIMg = document.createElement("a");
creatIMg.download = "图表.png"; // 设置下载的文件名,
creatIMg.href = img; // 下载url
document.body.appendChild(creatIMg);
creatIMg.click();
creatIMg.remove(); // 下载之后把创建的元素删除
});
};
// 导出单个图表图片
function Export() {
var img = new Image();
img.src = pieMyChart1.value.getDataURL({
type: "png",
pixelRatio: 1, //放大2倍
backgroundColor: "#fff",
});
img.onload = function () {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/png");
var a = document.createElement("a");
var event = new MouseEvent("click");
a.download = "图片.png" || "下载图片名称";
// 将生成的URL设置为a.href属性
a.href = dataURL;
// 触发a的单击事件
a.dispatchEvent(event);
a.remove();
};
}
</script>
<style>
.el-scrollbar {
height: calc(100vh - 59px);
}
.el-divider--horizontal {
margin: 10px 0;
}
#echarts {
padding: 20px;
width: 600px;
}
#main {
height: 300px;
width: 600px;
}
#pie {
height: 300px;
width: 600px;
}
</style>对上述三种方法进行简要总结。
至此,关于将 Echarts 图表导出为图片的三种方法介绍完毕。如需了解更多相关内容,可搜索本站历史文章或继续浏览后续文章,感谢支持。
作者最新文章
Mock.js 拦截失效或数据格式错误的常见原因及排查
2026-11-05 10:11:59
Java和JavaScript名字像但没关系:辨析Java、JavaWeb与JS
2026-11-04 09:30:54
CodePen、JSFiddle与RunJS对比:哪款JS在线运行工具更适合你?
2026-11-03 16:46:57
JS 统计图渲染空白或报错怎么排查?常见问题解决指南
2026-11-03 09:49:40
flv.js 常见报错 MediaError 与解码失败排查指南
2026-11-02 10:29:29
