這篇文章主要講解了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,”
看完上述內容,是不是對Java后臺批量生產echarts圖表并保存圖片的實例詳解有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。