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

一个围绕统计分析功能的系统,在最后制作统计分析时需要一个批量点击的功能,用以批量制作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,”

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

(0)

相关推荐

  • Echarts基本用法_动力节点Java学院整理

    echarts太完美了: 1,开源软件,无私的为我们提供漂亮的图形界面: 2,使用简单,默默的为我们封装了重要的js,只要会引用就会使用echarts: 3,种类多,echarts为我们提供了各种图标,其中最具象征的就是地图了: 4,兼容性好,基于html5动画渲染超棒. echarts官网 提供了源码和说明文档,使用echarts需要先到官网下载需要的js源文件. 官网上的demo中夹杂着很多我们用不到的东西,想使用饼状图就得从demo中把不用的去掉,劈植斩叶留下最原始的功能实现.这样毕竟比较

  • 利用pyecharts读取csv并进行数据统计可视化的实现

    因为需要一个html形式的数据统计界面,所以做了一个基于pyecharts包的可视化程序,当然matplotlib还是常用的数据可视化包,只不过各有优劣:基本功能概述就是读取csv文件数据,对每列进行数据统计并可视化,最后形成html动态界面,选择pyecharts的最主要原因就是这个动态界面简直非常炫酷. 先上成品图: 数据读取和数据分析模块: #导入csv模块 import csv #导入可视化模块 from matplotlib import pyplot as plt from pyla

  • python使用pyecharts库画地图数据可视化的实现

    python使用pyecharts库画地图数据可视化导库中国地图代码结果世界地图代码结果省级地图代码结果地级市地图代码结果 导库 from pyecharts import options as opts from pyecharts.charts import Map 中国地图 代码 data = [('湖北', 9074),('浙江', 661),('广东', 632),('河南', 493),('湖南', 463), ('安徽', 340),('江西', 333),('重庆', 275),

  • 解决pyecharts运行后产生的html文件用浏览器打开空白

    根据网站资源引用说明:pyecharts 使用的所有静态资源文件存放于 pyecharts-assets 项目中,默认挂载在 https://assets.pyecharts.org/assets/ 因为默认优先从远程引用资源,这就导致有的时候无法加载js文件,图表显示不出来 解决办法: 下载所需js文件到本地,修改资源引用地址 看网站的介绍,pyecharts 提供了更改全局 HOST 的快捷方式 官方下载 pyecharts-assets 提供了 pyecharts 的静态资源文件. 可通过

  • pyecharts动态轨迹图的实现示例

    今天的主题!最近很多朋友问起pyecharts,尤其是地理坐标图的制作,都说被其图形之美给吸引到了.刚好今天也有同事问起来,那么今天就以pyecharts的动态地理轨迹图为例,说说该怎么使用pyecharts. import pandas as pd import random from pyecharts import GeoLines, Style #地理轨迹图的类就是Geolines 在同事那里拿了一份国内部分城市的经纬度数据,首先用pandas读取数据,看看数据长什么样子,我们发现数据由

  • Java调用echarts提供的地图压缩方法来压缩地图

    由于默认情况下的 GeoJSON 文件太大,ECharts 提供了方法可以压缩地图. GeoJSON 介绍:http://geojson.org/ ECharts 提供了压缩算法,但是代码是 JavaScript 的,参考代码写个 Java 的也可以,但是通过 Java 提供的脚本引擎可以很方便的直接执行 JS. 本文压缩代码参考下面的项目: https://github.com/giscafer/mapshaper-plus 这里的算法也是来源于 ECharts 从该项目提取出压缩地图的 JS

  • python pyecharts 实现一个文件绘制多张图

    Grid并行显示多张图 注意: 第一个图需为 有 x/y 轴的图,即不能为 Pie,其他位置顺序任意 from pyecharts import Bar, Line, Scatter, EffectScatter, Grid ''' Grid类:并行显示多个图表 TODO 第一个图需为 有 x/y 轴的图,即不能为 Pie,其他位置顺序任意. ''' attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", &quo

  • 解决echarts中饼图标签重叠的问题

    饼图中的series有个avoidLabelOverlap属性, avoidLabelOverlap:是否启用防止标签重叠策略,默认开启,在标签拥挤重叠的情况下会挪动各个标签的位置,防止标签间的重叠. 当avoidLabelOverlap设置为false时会出现以下情况 改为true之后就不会重叠 代码如下 var option = { tooltip: { trigger: "item", formatter: "{a} <br/>{b} : {c} ({d}%

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

    一个围绕统计分析功能的系统,在最后制作统计分析时需要一个批量点击的功能,用以批量制作echarts图形后生成图片并保存图形和图片.方便后续导出. public class EchartsUtils { private static final String JSpath = "C:\\echarts-convert\\echarts-convert1.js"; public static void main(String[] args) { String imgName = "

  • java后台批量下载文件并压缩成zip下载的方法

    本文实例为大家分享了java后台批量下载文件并压缩成zip下载的具体代码,供大家参考,具体内容如下 因项目需要,将服务器上的图片文件压缩打包zip,下载到本地桌面. 首先,前端js: function doQueryPic() { var picsDate = $("#picsDate").val(); var piceDate = $("#piceDate").val(); var picInst = $("#pic_inst").combot

  • vue+element+Java实现批量删除功能

    表格的主要代码段 主要方法是: @selection-change="selsChange <el-table ref="singleTable" v-loading="loading" :data="tableData" stripe @selection-change="selsChange"> <el-table-column type="selection" width=

  • 详解Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片

    10万+IT人都在关注的图片批量压缩上传方案(完整案例+代码) 背景需求:为了客户端访问图片资源时,加载图片更流畅,体验更好,通常不会直接用原图路径,需要根据不同的场景显示不同规格的缩略图,根据商品关键属性,能够获取到图片不同尺寸规格的图片路径,并且能根据不同缩略图直观看到商品的关键属性,需要写一个Java小工具把本地磁盘中的图片资源一键上传至分布式FastDFS文件服务器,并把图片信息存入本地数据库,PC端或者客户端查询商品时,就可以根据商品的业务属性.比如根据productId就能把商品相关

  • web中拖拽排序和java后台交互实现方法示例

    一.业务需求 1,在后台的管理界面通过排序功能直接进入排序界面 2,在排序界面能够人工的手动拖动需要排序的标题,完成对应的排序之后提交 3,在app或者是前端就有对应的排序实现了 本文将详细介绍web拖拽排序和java后台交互的相关内容,下面话不多说了,来一起看看详细的介绍吧 二.页面展示 将整体页面效果展示出来之后如图所示(页面点击确定之后的效果是与java后台进行交互的): 三.设计思路: 后台:如果需要将排序的结果保存到数据库,那么必须要修改数据库中对应的起码一个字段(排序的序号sort)

  • Java实现批量下载(打包成zip)的实现

    引言 批量下载思路,首先前端发送下载请求,携带必要参数,也可无参默认批量下载页面全部数据:后台接收后进行数据处理拿到要下载文件的下载地址,循环下载地址,用压缩流,将文件直接写入压缩包,最后利用文件下载将压缩包输出给前端. 一.前端JS发送下载请求 1.ajax无法发送下载请求 关于下载的常见需求无非就是点击按钮下载或者选中点击批量下载,点击下载或批量下载后,携带参数向后台发送下载请求,但是JS中的ajax无法触发浏览器的下载机制,这也是处于安全考虑,所以下载请求不可以通过发送ajax请求实现.

  • Java实现批量发送带附件的邮件代码

    目录 前言 实体类(注意注释) 实现类 方法中调用,详情如下: 总结 前言 新功能上线时要经常发包到测试或生产服务器进行模块部署,但由于安全限制只能通过邮件传输小于10M的附件这种方式把jar包上传到服务器.所以往往要发送几十个邮件手动发送比较麻烦,偷懒写了个粘贴即用的Demo,如有不足,请多指教! 实体类(注意注释) 代码详情如下: package Email; /* * 参数实体类 * */ public class EmailParameter { //发信邮箱 private Strin

  • Vue中的echarts图表如何实现loading效果

    目录 echarts图表实现loading效果 Vue使用echarts图表总结 安装echarts依赖 创建图表 在页面中的使用(在这里我用的局部引入) echarts图表实现loading效果 main.js 中配置Vue属性ecahrts // 引入echarts import echarts from 'echarts' Vue.prototype.$echarts = echarts  data() 初始化数据调用数据 mounted() 周期函数内获取画布节点,并且调用加载loadi

  • Java实现批量导出导入数据及附件文件zip包

    目录 前言-应用场景 一.导出ZIP包 1. 列表数据导出到本地excel文件 2. 下载附件信息 3. 生成压缩文件(浏览器下载) 4. 删除临时目录 二.导入ZIP包 1. 上传zip包,解压到临时目录 2. 读取附件信息上传到文件服务器 3. 读取Excel文件存入数据库 4. 删除临时文件 前言-应用场景 某系统在不同单位使用时存在两套生产环境,他们的数据不是互通的,所以这些单位的上一级领导部门在统计数据的时候希望将A系统的数据和附件信息导出到一个压缩包里,然后把这个压缩包一键导入到B系

  • 解决java后台登录前后cookie不一致问题

    最近公司安全组提了一个bug,要求我们登录前后cookie不一致,这是一个奇葩的bug. 需求如下: 思路分析: 我的解决方案:在登录页面把Cookie中的JSESSIONID 删除掉,就可以实现cookie前后不一致,这种做法是治标不治本,简单粗暴,但是还是满足了需求. //删除cookie中的JSESSIONID document.cookie = "JSESSIONID=0;path=/;expires="+(new Date(0)).toGMTString(); 另外一种解决方

随机推荐