欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java后台批量生产echarts图表并保存图片

程序员文章站 2022-06-14 15:17:06
一个围绕统计分析功能的系统,在最后制作统计分析时需要一个批量点击的功能,用以批量制作echarts图形后生成图片并保存图形和图片。方便后续导出。public class echartsutils {...

一个围绕统计分析功能的系统,在最后制作统计分析时需要一个批量点击的功能,用以批量制作echarts图形后生成图片并保存图形和图片。方便后续导出。

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);//数据json
    try {
      file file = new file(imgpath);   //文件路径(路径+文件名)
      if (!file.exists()) {  //文件不存在则创建文件,先创建目录
        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()) {  //文件不存在则创建文件,先创建目录
        file dir = new file(writename.getparent());
        dir.mkdirs();
        writename.createnewfile(); // 创建新文件
      }
      bufferedwriter out = new bufferedwriter(new filewriter(writename));
      out.write(options); // \r\n即为换行
      out.flush(); // 把缓存区内容压入文件
      out.close(); // 最后记得关闭文件
    } catch (ioexception e) {
      e.printstacktrace();
    }
    return datapath;
  }
 
  /**
   * 图片文件转为base64
   * @param imgpath
   */
  private static string imagetobase64(string imgpath) {
    byte[] data = null;
    // 读取图片字节数组
    try {
      inputstream in = new fileinputstream(imgpath);
      data = new byte[in.available()];
      in.read(data);
      in.close();
    } catch (ioexception e) {
      e.printstacktrace();
    }
    // 对字节数组base64编码
    base64encoder encoder = new base64encoder();
    // 返回base64编码过的字节数组字符串
    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("文件已经被成功删除");
    }
    return result;
  }
}

  因为是需要保存base64图片。所以在生成并读取完毕后将图片删除。

  附上图片转base64方法:

/**
 * 图片文件转为base64
 * @param imgpath
 */
private static string imagetobase64(string imgpath) {
  byte[] data = null;
  // 读取图片字节数组
  try {
    inputstream in = new fileinputstream(imgpath);
    data = new byte[in.available()];
    in.read(data);
    in.close();
  } catch (ioexception e) {
    e.printstacktrace();
  }
  // 对字节数组base64编码
  base64encoder encoder = new base64encoder();
  // 返回base64编码过的字节数组字符串
  return encoder.encode(objects.requirenonnull(data));
}

转换后的编码没有头,需要在保存时手动添加“data:image/png;base64,”

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。