ECharts繪制的圖形保存為圖片

最近的項目需要導(dǎo)出文件,導(dǎo)出的文件里有數(shù)據(jù)分析圖碉输,如折線圖,柱狀圖亭珍,散點圖等敷钾。綜合考慮之后,我選擇了目前已經(jīng)很成熟的也很流行的ECharts庫肄梨。

ECharts一個純 Javascript 的圖表庫阻荒,它提供了繪制各種圖形的方法方法,幾乎囊括了所有的二維圖形众羡,用起來也很是方便侨赡。還提供了圖片下載的功能。這里我們主要說的是圖片下載粱侣。下面是我找到的一些方法總結(jié)以及它們的適用情況羊壹。

1.用ECharts配置項手冊中的toolbox.feature.saveAsImage

因為是自帶的,不需要怎么處理齐婴,直接用就好油猫。示例:

toolbox: {

  show: true,

  feature: {

    saveAsImage: {

    show:true,

    excludeComponents :['toolbox'],

    pixelRatio: 2

    }

  }

}

這一段一定要寫在option中,這樣會在圖形右上角產(chǎn)生一個保存為圖片的標(biāo)識柠偶,點擊即可下載圖片情妖,這種方法試用于網(wǎng)站點擊保存的需求,效果如下圖:


saveAsImage測試效果圖


2.用ECharts實例方法getImage

需要注意的是诱担,這個功能在ECharts3中好像已經(jīng)舍棄鲫售,作者用ECharts3沒有出現(xiàn)任何效果,換成ECharts2的js文件才可以運行该肴。示例:

myChart.setOption(option);

var picInfo = myChart.getImage();

getImage要放在setOption方法生成一個簡單的圖形之后情竹,我們怎么驗證getImage是否生效了呢?

方法a:萬能的alert調(diào)試,這里 alert (picInfo); 的結(jié)果彈出的是[object HTMLImageElement]秦效,我們?nèi)匀徊恢肋@里的對象是什么雏蛮。

方法b:頁面中新定義一個容器,將得到的picInfo寫入div阱州,看看是什么結(jié)果:

var picInfo = myChart.getImage();

onload=function f(){

  document.getElementById("pic").appendChild(picInfo);

  //document.getElementById("pic").innerHTML = picInfo;

}

注意挑秉,這里的寫入div,要用上面的方法寫入上面定義的div苔货。得到如下圖所示:


getImage得到的對象寫入div

如果用下面的方法寫入犀概,會在定義的div中出現(xiàn)[object HTMLImageElement],如下圖:


getImage得到的對象普通寫入

遺憾的是夜惭,這種方法得到的picInfo為[object HTMLImageElement]姻灶,無法通過Ajax傳遞到后臺處理,只能用于顯示诈茧。因此产喉,這種方法適用于一些網(wǎng)站繪制圖形上下或者左右同步顯示的需求。


3.用ECharts實例方法getDataURL

很顯然敢会,上面的兩種情況并不能滿足我現(xiàn)在圖片自動保存的需求曾沈,下面說我最后解決方案。

首先鸥昏,我們用getDataURL得到圖片信息:

myChart.setOption(option);

var picInfo = myChart.getDataURL();

getDataURL仍然要放在setOption方法生成一個簡單的圖形之后塞俱,現(xiàn)在我們得到的picInfo是一串base64信息,我們設(shè)法將得到的picInfo用Ajax傳遞到后臺處理吏垮,作者用的是php障涯,因此,以php處理為例:

新建一個文件惫皱,取名test.php像樊,(請把此文件放在可運行的環(huán)境里尤莺,這是基礎(chǔ))旅敷。在php文件中將繪制圖形的html文件include進來,接收html中Ajax傳遞到后臺的信息颤霎,將base64轉(zhuǎn)化為圖片保存媳谁。

先判斷picInfo是否存在,存在則傳遞到后臺友酱,代碼如下:

if(picInfo){

  $.ajax({

    type: "post",

    data: {

      baseimg: picInfo

    },

    url: 'test.php?action=save',

    async: true,

    success: function(data) {

      console.log(picInfo);

    },

    error: function(err){

      console.log('圖片保存失敗');

      alert('圖片保存失敗');

    }

  });

}

test.php接收數(shù)據(jù)并處理:

<?php

include("test.html");

if($action = "save"){

  $picInfo = $_POST['baseimg'];

  $streamFileRand = date('YmdHis').rand(1000,9999); //圖片名

  $picType ='.png';//圖片后綴

  $streamFilename = "/www/echarts/".$streamFileRand .$picType; //圖片保存地址

  preg_match('/(?<=base64,)[\S|\s]+/',$picInfo,$picInfoW);//處理base64文本

  file_put_contents($streamFilename,base64_decode($picInfoW[0]));//文件寫入

}

OK晴音,成功保存圖片到自己想要的位置。還有一點缔杉,如果你在測試的時候用了getDataURL方法锤躁,看到一個空的坐標(biāo)軸,那么可能是動畫效果產(chǎn)生的后果或详,animation決定是否開啟動畫系羞,關(guān)閉即可郭计,在option中加入:

animation : false,

好啦,得到的圖形可以正確顯示啦椒振。祝大家好運昭伸,不要遇到各種棘手的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澎迎,一起剝皮案震驚了整個濱河市庐杨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夹供,老刑警劉巖灵份,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罩引,居然都是意外死亡各吨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門袁铐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭蜒,“玉大人,你說我怎么就攤上這事剔桨√敫” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵洒缀,是天一觀的道長瑰谜。 經(jīng)常有香客問我,道長树绩,這世上最難降的妖魔是什么萨脑? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮饺饭,結(jié)果婚禮上渤早,老公的妹妹穿的比我還像新娘。我一直安慰自己瘫俊,他們只是感情好鹊杖,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扛芽,像睡著了一般骂蓖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上川尖,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天登下,我揣著相機與錄音,去河邊找鬼。 笑死被芳,一個胖子當(dāng)著我的面吹牛银酬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筐钟,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼揩瞪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了篓冲?” 一聲冷哼從身側(cè)響起李破,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壹将,沒想到半個月后嗤攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡诽俯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年妇菱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暴区。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡闯团,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仙粱,到底是詐尸還是另有隱情房交,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布伐割,位于F島的核電站候味,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隔心。R本人自食惡果不足惜白群,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硬霍。 院中可真熱鬧帜慢,春花似錦、人聲如沸须尚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耐床。三九已至,卻和暖如春楔脯,著一層夾襖步出監(jiān)牢的瞬間撩轰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堪嫂,地道東北人偎箫。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像皆串,于是被迫代替她去往敵國和親淹办。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,280評論 25 707
  • Ubuntu的發(fā)音 Ubuntu副硅,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音翅萤。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,353評論 9 467
  • 周振璘11月份第16次讀書打卡恐疲,我讀的書是《考場滿分作文全集》,今天讀了第250頁到第 270 頁套么,我最喜歡的文章...
    Jolin08閱讀 311評論 0 0
  • 相遇總是這樣 恰逢其會 猝不及防 爭吵總是這樣 拒絕原諒 轉(zhuǎn)身彷徨 我親愛的陌生人 真的談心...
    二胖愛穿小裙子閱讀 189評論 0 1
  • 今天是學(xué)院第二期學(xué)員的結(jié)業(yè)雅集培己,這免不了提及離別,而對于離別我總有些無奈胚泌,卻不想過于傷悲漱凝,悲何呢,人在情就在诸迟,...
    萱萱丫頭閱讀 267評論 0 0