node結(jié)合echarts后臺(tái)生成圖片并轉(zhuǎn)成base64碼

廢話不多說(shuō)赫粥,直接上步驟:

一舀寓、開(kāi)發(fā)工具及環(huán)境

1.開(kāi)發(fā)工具:webstorm蔗候、apipost(下載方法自行百度)
2.開(kāi)發(fā)環(huán)境:node.js(可以去官網(wǎng)免費(fèi)下載一路next安裝即可https://nodejs.org/en/

image.png

(1)安裝后查看是否安裝成功 win+R然后cmd打開(kāi)命令行輸入node -v和npm -v查看版本信息
image.png

二垒酬、開(kāi)始寫(xiě)代碼

用webstrom在工作目錄下創(chuàng)建node項(xiàng)目


image.png

image.png

點(diǎn)擊create
項(xiàng)目創(chuàng)建好后打開(kāi) 控制臺(tái)安裝node-echarts依賴包(核心功能靠此包)


image.png

打開(kāi)目錄下的app.js刪掉原有內(nèi)容寫(xiě)下如下代碼
var express = require('express');
var path = require('path');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var body_parser = require("body-parser")

var app = express();

app.use(logger('dev'));
//設(shè)置請(qǐng)求頭格式
app.use(body_parser.urlencoded({extended: false}))
app.use(body_parser.json())
//掛載靜態(tài)資源
app.use(express.static(path.join(__dirname, 'public')));

app.use('/image', indexRouter);


module.exports = app;

1.在跟目錄下創(chuàng)建目錄echartsType王带,并創(chuàng)建echartsBar.js


image.png

echartsBar.js代碼如下


//構(gòu)造柱狀圖數(shù)據(jù)
var echartBar = (data) => {
    var {title,subtitle,legendData,xData,seriesData} = data;
    seriesData = seriesData.map((item,index,arr) => {
        return {
            name: item.name,
            type: "bar",
            label:{
                show:true,
                formatter: '{c}',
                position:"top"
            },
            data: item.data
        }
    })
    var option = {

        color:[
            '#ff7f50', '#87cefa', '#da70d6', '#32cd32', '#6495ed',
            '#ff69b4', '#ba55d3', '#cd5c5c', '#ffa500', '#40e0d0',
            '#1e90ff', '#ff6347', '#7b68ee', '#00fa9a', '#ffd700',
            '#6b8e23', '#ff00ff', '#3cb371', '#b8860b', '#30e0e0'
        ],
        title: {
            text: title,
            subtext: subtitle
        },

        legend: {
            data: legendData,
            right:50
        },
        xAxis: [
            {
                type: "category",
                data:xData
            }
        ],
        yAxis: [
            {
                type: "value"
            }
        ],
        series: seriesData
    }

    return option
}

module.exports = echartBar;

打開(kāi)routes下的index.js開(kāi)始寫(xiě)接口

//模塊引入
const express = require('express');
const router = express.Router();
//生成echart圖片模塊
const node_echarts = require('node-echarts');
const path = require("path");
const fs = require("fs");
const ECHARTS_PIE = require("../echartsType/echartsPie");
const ECHARTS_BAR = require("../echartsType/echartsBar");
const ECHARTS_LINE = require("../echartsType/echartsLine")
const ECHARTS_CHINA_MAP = require("../echartsType/echartsChinaMap")

//返回結(jié)果集
var resultData = {
    status: "",
    data: {},
    msg: ""
};

//post請(qǐng)求柱狀圖
router.post('/bar', function (req, res, next) {
    var data = req.body;
    var {title, legendData, xData, seriesData} = data;
    if (title && seriesData.length !== 0 && legendData.length !== 0 && xData.length !== 0) {
        var option = ECHARTS_BAR(data);
        //生成餅圖
        node_echarts({
            width: 500,
            height: 500,
            option: option,
            //創(chuàng)建圖片地址
            path: path.join(__dirname, `../public/images/image.png`),
            enableAutoDispose: true
        });
        //讀取圖片并轉(zhuǎn)化二進(jìn)制流
        let bitmap = fs.readFileSync(path.join(__dirname, '../public/images/image.png'));
        //將圖片轉(zhuǎn)成base64編碼
        resultData.data = `data:image/png;base64,` + Buffer.from(bitmap, 'binary').toString('base64');
        resultData.status = 200;
        resultData.msg = "柱狀圖獲取成功";
        res.send(resultData);
        res.end();
        //刪除生成圖片淑蔚,清理痕跡
        //fs.unlinkSync(path.join(__dirname, '../public/images/image.png'));
    } else {
        resultData.data = "";
        resultData.status = 400;
        resultData.msg = "必傳字段不可為空";
        res.send(resultData);
        res.end();
    }
});

module.exports = router;

控制臺(tái)運(yùn)行程序接口為http://localhost:3000/image/bar
請(qǐng)求數(shù)據(jù)為

{
    "title":"柱狀圖",
    "subtitle":"副標(biāo)題",
    "legendData":[
        "蒸發(fā)量",
        "降水量"
    ],
    "xData":[
        "1月",
        "2月",
        "3月",
        "4月",
        "5月",
        "6月",
        "7月",
        "8月",
        "9月",
        "10月",
        "11月",
        "12月"
    ],
    "seriesData":[
        {
            "name":"蒸發(fā)量",
            "data":[
                2,
                4.9,
                7,
                23.2,
                25.6,
                76.7,
                135.6,
                162.2,
                32.6,
                20,
                6.4,
                3.3
            ]
        },
        {
            "name":"降水量",
            "data":[
                2.6,
                5.9,
                9,
                26.4,
                28.7,
                70.7,
                175.6,
                182.2,
                48.7,
                18.8,
                6,
                2.3
            ]
        }
    ]
}

用apipost測(cè)試接口


image.png

public下的images會(huì)生成圖片


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辫秧,隨后出現(xiàn)的幾起案子束倍,更是在濱河造成了極大的恐慌被丧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绪妹,死亡現(xiàn)場(chǎng)離奇詭異甥桂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)邮旷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)黄选,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人婶肩,你說(shuō)我怎么就攤上這事办陷。” “怎么了律歼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵民镜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我险毁,道長(zhǎng)制圈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任畔况,我火速辦了婚禮鲸鹦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跷跪。我一直安慰自己馋嗜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布吵瞻。 她就那樣靜靜地躺著葛菇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪听皿。 梳的紋絲不亂的頭發(fā)上熟呛,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音尉姨,去河邊找鬼庵朝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛又厉,可吹牛的內(nèi)容都是我干的九府。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼覆致,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼侄旬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起煌妈,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤儡羔,失蹤者是張志新(化名)和其女友劉穎宣羊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體汰蜘,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仇冯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了族操。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苛坚。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖色难,靈堂內(nèi)的尸體忽然破棺而出泼舱,到底是詐尸還是另有隱情,我是刑警寧澤枷莉,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布娇昙,位于F島的核電站,受9級(jí)特大地震影響笤妙,放射性物質(zhì)發(fā)生泄漏涯贞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一危喉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧州疾,春花似錦辜限、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至颗胡,卻和暖如春毫深,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毒姨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工哑蔫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弧呐。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓闸迷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親俘枫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腥沽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容