溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java后臺(tái)批量生產(chǎn)echarts圖表并保存圖片的實(shí)例詳解

發(fā)布時(shí)間:2020-07-21 09:57:05 來(lái)源:億速云 閱讀:380 作者:小豬 欄目:編程語(yǔ)言

這篇文章主要講解了Java后臺(tái)批量生產(chǎn)echarts圖表并保存圖片的實(shí)例詳解,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

一個(gè)圍繞統(tǒng)計(jì)分析功能的系統(tǒng),在最后制作統(tǒng)計(jì)分析時(shí)需要一個(gè)批量點(diǎn)擊的功能,用以批量制作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:/平臺(tái)/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:/平臺(tái)/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:/平臺(tái)/data/data"+ UUID.randomUUID().toString().substring(0, 8) +".json";
    try {
      /* 寫(xiě)入Txt文件 */
      File writename = new File(dataPath); // 相對(duì)路徑,如果沒(méi)有則要建立一個(gè)新的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();
    }
    // 對(duì)字節(jié)數(shù)組Base64編碼
    BASE64Encoder encoder = new BASE64Encoder();
    // 返回Base64編碼過(guò)的字節(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;
  }
}

  因?yàn)槭切枰4鎎ase64圖片。所以在生成并讀取完畢后將圖片刪除。

  附上圖片轉(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();
  }
  // 對(duì)字節(jié)數(shù)組Base64編碼
  BASE64Encoder encoder = new BASE64Encoder();
  // 返回Base64編碼過(guò)的字節(jié)數(shù)組字符串
  return encoder.encode(Objects.requireNonNull(data));
}

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

看完上述內(nèi)容,是不是對(duì)Java后臺(tái)批量生產(chǎn)echarts圖表并保存圖片的實(shí)例詳解有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI