最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java后臺批量生產(chǎn)echarts圖表并保存圖片

 更新時間:2020年05月28日 14:42:43   作者:zengyif_szu  
這篇文章主要介紹了Java后臺批量生產(chǎn)echarts圖表并保存圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一個圍繞統(tǒng)計分析功能的系統(tǒng),在最后制作統(tǒng)計分析時需要一個批量點擊的功能,用以批量制作echarts圖形后生成圖片并保存圖形和圖片。方便后續(xù)導(dǎo)出。

public class EchartsUtils {
  private static final String JSpath = "C:\\echarts-convert\\echarts-convert1.js";
 
 
  public static void main(String[] args) {
    String imgName = "D:/平臺/tes" + UUID.randomUUID().toString().substring(0, 4) + ".png ";
    String option = "{xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [820, 932, 901, 934, 1290, 1330, 1320],type: 'line'}]}";
    //String options = "test";
    String base64Img = generateEChart(option,1600,900);
    System.out.println(base64Img);
  }
 
 
  public static String generateEChart(String options,int width,int height) {
 
    String fileName= "test-"+UUID.randomUUID().toString().substring(0, 8) + ".png";
    String imgPath = "D:/平臺/img/" +fileName;
 
    String dataPath = writeFile(options);//數(shù)據(jù)json
    try {
      File file = new File(imgPath);   //文件路徑(路徑+文件名)
      if (!file.exists()) {  //文件不存在則創(chuàng)建文件,先創(chuàng)建目錄
        File dir = new File(file.getParent());
        dir.mkdirs();
        file.createNewFile();
      }
      String cmd = "phantomjs " + JSpath + " -infile " + dataPath + " -outfile " + imgPath + " -width " + width + " -height " + height;
      System.out.println(cmd);
      Process process = Runtime.getRuntime().exec(cmd);
      BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
      String line = "";
      while ((line = input.readLine()) != null) {
        //System.out.println(line);
      }
      input.close();
    } catch (IOException e) {
      e.printStackTrace();
    }finally{
      String base64Img = ImageToBase64(imgPath);
 
      //deleteFile(imgPath);
      //deleteFile(dataPath);
      return base64Img.replaceAll("\\s*", "");
    }
  }
 
  public static String writeFile(String options) {
    String dataPath="D:/平臺/data/data"+ UUID.randomUUID().toString().substring(0, 8) +".json";
    try {
      /* 寫入Txt文件 */
      File writename = new File(dataPath); // 相對路徑,如果沒有則要建立一個新的output.txt文件
      if (!writename.exists()) {  //文件不存在則創(chuàng)建文件,先創(chuàng)建目錄
        File dir = new File(writename.getParent());
        dir.mkdirs();
        writename.createNewFile(); // 創(chuàng)建新文件
      }
      BufferedWriter out = new BufferedWriter(new FileWriter(writename));
      out.write(options); // \r\n即為換行
      out.flush(); // 把緩存區(qū)內(nèi)容壓入文件
      out.close(); // 最后記得關(guān)閉文件
    } catch (IOException e) {
      e.printStackTrace();
    }
    return dataPath;
  }
 
  /**
   * 圖片文件轉(zhuǎn)為base64
   * @param imgPath
   */
  private static String ImageToBase64(String imgPath) {
    byte[] data = null;
    // 讀取圖片字節(jié)數(shù)組
    try {
      InputStream in = new FileInputStream(imgPath);
      data = new byte[in.available()];
      in.read(data);
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    // 對字節(jié)數(shù)組Base64編碼
    BASE64Encoder encoder = new BASE64Encoder();
    // 返回Base64編碼過的字節(jié)數(shù)組字符串
    return encoder.encode(Objects.requireNonNull(data));
  }
 
  /**
   * 刪除文件
   *
   * @param pathname
   * @return
   * @throws IOException
   */
  public static boolean deleteFile(String pathname){
    boolean result = false;
    File file = new File(pathname);
    if (file.exists()) {
      file.delete();
      result = true;
      System.out.println("文件已經(jīng)被成功刪除");
    }
    return result;
  }
}

  因為是需要保存base64圖片。所以在生成并讀取完畢后將圖片刪除。

  附上圖片轉(zhuǎn)base64方法:

/**
 * 圖片文件轉(zhuǎn)為base64
 * @param imgPath
 */
private static String ImageToBase64(String imgPath) {
  byte[] data = null;
  // 讀取圖片字節(jié)數(shù)組
  try {
    InputStream in = new FileInputStream(imgPath);
    data = new byte[in.available()];
    in.read(data);
    in.close();
  } catch (IOException e) {
    e.printStackTrace();
  }
  // 對字節(jié)數(shù)組Base64編碼
  BASE64Encoder encoder = new BASE64Encoder();
  // 返回Base64編碼過的字節(jié)數(shù)組字符串
  return encoder.encode(Objects.requireNonNull(data));
}

轉(zhuǎn)換后的編碼沒有頭,需要在保存時手動添加“data:image/png;base64,”

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • redisson實現(xiàn)分布式鎖原理

    redisson實現(xiàn)分布式鎖原理

    本文將詳細(xì)介紹redisson實現(xiàn)分布式鎖原理。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • SpringCloud中的Seata基本介紹與安裝教程

    SpringCloud中的Seata基本介紹與安裝教程

    Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了SpringCloud之Seata基本介紹與安裝,需要的朋友可以參考下
    2024-01-01
  • Java中replace與replaceAll的區(qū)別與測試

    Java中replace與replaceAll的區(qū)別與測試

    replace和replaceAll是JAVA中常用的替換字符的方法,下面這篇文章主要給大家介紹了關(guān)于Java中replace與replaceAll的區(qū)別與測試,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java結(jié)構(gòu)型設(shè)計模式中的適配器模式與橋接模式解析

    Java結(jié)構(gòu)型設(shè)計模式中的適配器模式與橋接模式解析

    這篇文章主要介紹了Java結(jié)構(gòu)型設(shè)計模式中的適配器模式與橋接模式,結(jié)構(gòu)型設(shè)計模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問題,需要的朋友可以參考下
    2016-02-02
  • Java圖片批量壓縮像素的實現(xiàn)方法

    Java圖片批量壓縮像素的實現(xiàn)方法

    我們開發(fā)中經(jīng)常會遇到原圖清晰度高,考慮到效率問題,我們不可能拿原圖進行顯示,服務(wù)端一般都要對圖片進行壓縮處理,然后發(fā)送給客戶端顯示,這篇文章主要給大家介紹了關(guān)于Java圖片批量壓縮像素的實現(xiàn)方法,需要的朋友可以參考下
    2021-12-12
  • 如何解決Spring MVC中響應(yīng)亂碼問題

    如何解決Spring MVC中響應(yīng)亂碼問題

    這篇文章主要介紹了如何解決Spring MVC中響應(yīng)亂碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot @ExceptionHandler與@ControllerAdvice異常處理詳解

    SpringBoot @ExceptionHandler與@ControllerAdvice異常處理詳解

    在Spring Boot應(yīng)用的開發(fā)中,不管是對底層數(shù)據(jù)庫操作,對業(yè)務(wù)層操作,還是對控制層操作,都會不可避免的遇到各種可預(yù)知的,不可預(yù)知的異常需要處理,如果每個處理過程都單獨處理異常,那么系統(tǒng)的代碼耦合度會很高,工作量大且不好統(tǒng)一,以后維護的工作量也很大
    2022-10-10
  • Java報錯Java.net.SocketTimeoutException的幾種解決方法

    Java報錯Java.net.SocketTimeoutException的幾種解決方法

    在 Java 網(wǎng)絡(luò)編程中,SocketTimeoutException 通常表示在進行網(wǎng)絡(luò)操作時,等待響應(yīng)的時間超過了設(shè)定的超時時間,本文將深入探討 Java.net.SocketTimeoutException 的問題,并為開發(fā)者和環(huán)境配置者提供詳細(xì)的解決方案,需要的朋友可以參考下
    2024-10-10
  • Java實現(xiàn)文件上傳的方法總結(jié)

    Java實現(xiàn)文件上傳的方法總結(jié)

    這篇文章主要為大家介紹了三種Java實現(xiàn)文件上傳的方法,文中的示例代碼講解詳細(xì),對我們的學(xué)習(xí)或工作有一定的借鑒價值,感興趣的可以了解一下
    2023-04-04
  • Java并發(fā)CopyOnWrite容器原理解析

    Java并發(fā)CopyOnWrite容器原理解析

    這篇文章主要介紹了Java并發(fā)CopyOnWrite容器原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論

苍溪县| 定南县| 萝北县| 句容市| 门头沟区| 兴义市| 鹤山市| 科尔| 虹口区| 南澳县| 呈贡县| 剑川县| 永善县| 舒兰市| 奈曼旗| 龙山县| 射洪县| 黎城县| 塔城市| 夹江县| 静安区| 武宣县| 赣州市| 新昌县| 湟中县| 千阳县| 浠水县| 和平区| 繁昌县| 钟祥市| 宝坻区| 临武县| 静乐县| 曲水县| 尚义县| 巴塘县| 壤塘县| 杭锦旗| 鲜城| 浦北县| 大化|