nodejs保存echarts图片

canvas和@napi-rs/canvas 可以用于在服务器端处理canvas图形,使用一个即可。

canvas安装方法:https://github.com/Automattic/node-canvas/wiki/Installation:-Windows

@napi-rs/canvas,底层使用rust构建可以直接 npm安装。

npm i @napi-rs/canvas

示例、使用 echarts 和 canvas 库在 Node.js 环境下生成和保存图表图像, 并且通过本地打开操作系统默认图片查看器展示生成的图像。

import * as echarts from 'echarts';
// import {createCanvas} from '@napi-rs/canvas';
import {createCanvas} from "canvas";
import fs from 'fs';
import {exec} from 'child_process';
// import { SVGRenderer, CanvasRenderer } from 'echarts/renderers';
// import _ from 'lodash';
// echarts.use([SVGRenderer, CanvasRenderer]);function renderChart(config) {const canvas = createCanvas(config.width, config.height);const chart = echarts.init(canvas);chart.setOption(config.option);let result;if (config.base64) {result = canvas.toDataURL(config.formatType);} else {result = canvas.toBuffer(config.formatType);}chart.dispose();return result;
}const option = {xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: 'bar'},{data: [120, 200, 150, 80, 70, 110, 130],type: 'bar'},{data: [120, 200, 150, 80, 70, 110, 130],type: 'bar'}]
};const mime = {png: "image/png",jpeg: "image/jpeg",svg: "image/svg+xml",gif: "image/gif",pdf: "application/pdf"
};// 方法一
let res = renderChart({width: 800, height: 600, option, base64: false, formatType: mime.png});
// console.log(res);
fs.writeFileSync("./1.png", res);
exec(`start "" "./1.png"`, (error, stdout, stderr) => {if (error) {console.error(`exec error: ${error}`);return;}if (stderr) {console.error(`stderr: ${stderr}`);return;}console.log(`stdout: ${stdout}`);
});// 方法二
res = renderChart({width: 800, height: 600, option, base64: true, formatType: mime.png});
// console.log(res);
const base64Data = res.replace(/^data:image\/png;base64,/, '');
const buffer = Buffer.from(base64Data, 'base64');
fs.writeFileSync("./2.png", buffer);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念,并解决一个经典问题:斐波那契数列。学生将学习如何使用动态规划优化递归计算,并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …

Thread线程基础使用

多线程目的:其实就是希望“并行”执行多任务,提升效率。 单核多线程基于时间片轮询 并发而非并行 线程最大数等于cpu核心数为佳 namespace thinger.ThreadDemo {class Program{//主线程static void Main(string[] args){Console.WriteLine("这个…

远程调试软件对比与使用推荐

远程调试软件对比与使用推荐 远程调试是现代软件开发中不可或缺的一部分,尤其是在处理分布式系统、云端服务或远程服务器上的问题时。以下是对几种常见远程调试工具的详细对比和推荐使用场景。 1. GDB (GNU Debugger) 特点 开源:完全免费且开源&…

HTML和JavaScript实现商品购物系统

下面是一个更全面的商品购物系统示例,包含新增商品、商品的增加删除以及结算找零的功能。这个系统使用HTML和JavaScript实现。 1.功能说明: 这个应用程序使用纯HTML和JavaScript实现。 包含一个商品列表和一个购物车区域。商品列表中有几个示例商品&a…

[python SQLAlchemy数据库操作入门]-10.性能优化:提升 SQLAlchemy 在股票数据处理中的速度

哈喽,大家好,我是木头左! 当处理大量数据时,如股票数据,默认的ORM操作可能会显得效率低下。本文将探讨如何通过一些技巧和策略来优化SQLAlchemy ORM的性能,从而提升其在股票数据处理中的速度。 1. 选择合适的数据类型 在定义模型时,选择合适的数据类型对于性能至关重要…

【深入理解ApacheTomcat】

深入理解ApacheTomcat 简介 Apache Tomcat 是一个开源的Java Servlet容器,由Apache软件基金会开发。它实现了Java EE(企业版)的Servlet和JSP(JavaServer Pages)规范,并提供了对HTTP请求的处理能力。Tomca…

将带注释的Word文档改造成点击注释引用即可弹窗显示注释的HTML文档

阅读中国古籍电子书的时候,往往有很多注释。在正文和注释之间来回滚动页面是一件挺麻烦的事,比较方便的做法是将它编辑成通过点击注释引用即将注释弹出显示在引用所在位置的HTML文档,然后利用HTML文档制作成PDF或者epub文件,就比较…

C 语言动态爱心代码

C 语言动态爱心代码 代码 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / …

Harmony Next开发通过bindSheet绑定半模态窗口

示例概述 Harmony Next开发通过bindSheet绑定半模态窗口 知识点 半模态窗口父子组件传值 组件 LoginComponent Component struct LoginComponent {// Prop 父子单项绑定值Prop message:string // Link 父子双向绑定值Link userName:stringLink password:stringLink isSh…

codeforces一些题目思路复盘

codeforces round 919 dv2 C Partitioning the Array 大致题意&#xff0c;对于n约数i&#xff0c;我们把原数组分成份&#xff0c;并且每份中有i个元素&#xff0c;对于每个分组情况&#xff0c;如果存在一个数m使得数组中元素modm后使得每个部分的数组完全相同&#xff0c;如…

ElasticSearch 简介

一、什么是 ElastcSearch&#xff1f; ElasticSearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎。 1.1 ElasticSearh 的基本术语概念 index 索引 索引类似与 mysql 中的数据库&#xff0c;ES 中的索引是存储数据的地方&#xff0c;包含了一堆有相似结构的文档数据…

解决 Git 默认不区分文件名大小写的问题

不得不说 Git 默认不区分文件名大小写真是一个大坑&#xff0c;由于之前的项目目录比较乱&#xff0c;项目下的文件夹命名都不规范&#xff0c;这两天一直在整理&#xff0c;然后今天从服务器将项目重新 clone 下来后发现&#xff0c;之前将所有文件名首字母改成大写的改动全部…

Python自动化操作文档系列

在忙碌的工作中&#xff0c;你是否渴望偶尔的轻松时刻&#xff1f;Python自动化操作文档系列专题文章为你带来全新的 “摸鱼神器”。Python以其高效灵活的特性&#xff0c;能让繁琐任务自动完成&#xff0c;为你争取片刻悠闲。从简单的脚本到复杂的自动化流程&#xff0c;本系列…

CSS中相对、固定、绝对及粘性定位的应用场景

在CSS中&#xff0c;不同的定位方式&#xff08;相对定位、固定定位、绝对定位和粘性定位&#xff09;各自有其特定的使用场景。以下是这些定位方式的详细说明和使用场景&#xff1a; 1. 相对定位&#xff08;Relative Positioning&#xff09; 使用场景&#xff1a; 微调元…

Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF

Latex代码中使用pdf图片&#xff0c;无法预览&#xff0c;提示&#xff1a; Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF 解决办法&#xff1a; 点击左边这个刷新下即可

openEuler centOS 统信UOS 配置ip的方式。

前言: 不同的Linux发行版&#xff0c;其基础命令基本相同。 配置网络的具体方式缺可能有多种方式。经过实操&#xff0c;发现openEuler centOS 统信UOS这三种操作系统的配置网络方式一样&#xff0c;所以记录下操作步骤。 在openEuler、centOS、统信UOS上配置静态IP地址&…

测试工程师的职业规划

测试人员在管理上的发展 基层测试管理者&#xff1a;测试组长 工作内容&#xff1a;安排小组工作&#xff0c;提升小组成员测试能力&#xff0c;负责重要的测试工作。 负责对象&#xff1a;版本&#xff0c;项目 中层测试管理者&#xff1a;测试经理 负责对象&#xff1…

Linux系统下多任务管理器:screen使用指南

文章目录 安装快速入门启动Screen会话创建和管理窗口退出和恢复会话 高级功能多用户支持日志记录复制粘贴模式自定义配置 在Linux和类Unix系统的世界里&#xff0c;命令行是用于与系统交互的主要方式之一。然而&#xff0c;当涉及到远程服务器管理、长时间运行的任务或者同时处…

Android系统卡启动问题排查

Android系统启动正常来说会涉及到如下几个过程&#xff1a; 引导加载程序&#xff08;Bootloader&#xff09;Linux内核&#xff08;Kernel&#xff09;&#xff0c;负责硬件抽象、内存管理、进程管理、网络堆栈等init进程 init进程读取init.rc配置文件&#xff0c;用于启动各…

C缺陷与陷阱 — 8 编译与链接

目录 1 程序的编译过程 2 动态链接的优缺点 2.1 动态链接的优点 2.2 动态链接的缺点 2.3 只使用动态链接 3 函数库链接的5个特殊秘密 4 警惕Interpositioning 5 产生链接器报告文件 1 程序的编译过程 程序的编译过程是将源代码转换成计算机可以执行的机器代码的过程。…