我使用高级图表将图表转换为图像。
请给我一个答案。 TT
我使用了base64,因为我需要将图像保存在服务器上,但我有
难以使用highcharts api。
我成功地将图表的svg转换为base64。
但是,将base64转换为png时出错。
Base64通常是编码的,但不会转换为png。
Highcharts.getSVG = function (charts) {
var svgArr = [],
top = 0,
width = 0;
Highcharts.each(charts, function (chart) {
var svg = chart.getSVG();
svg = svg.replace(
'<svg',
'<g transform="translate(0,' + top + ')" '
);
svg = svg.replace('</svg>', '</g>');
top += chart.chartHeight;
width = Math.max(width, chart.chartWidth);
svgArr.push(svg);
var b64 = btoa(svg);
var data = "bin_data=" + b64;
alert("end")
$.ajax({
type: "POST",
url: "ImgSave",
data: data,
success: function(data){
alert('success');
}
});
});
return '<svg height="' + top + '" width="' + width +
'" version="1.1" xmlns="http://www.w3.org/2000/svg">' +
svgArr.join('') + '</svg>';
};
Highcharts.exportCharts = function (charts, options) {
// Merge the options
options = Highcharts.merge(Highcharts.getOptions().exporting, options);
// Post to export server
Highcharts.post(options.url, {
filename: options.filename || 'chart',
type: options.type,
width: options.width,
svg: Highcharts.getSVG(charts)
});
};
$("#imagesave").click(function() {
Highcharts.exportCharts([chart]);
});
// java的
System.out.println("start");
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd_hhmmss");
String strFile = req.getParameter("bin_data");
strFile = strFile.replace(" ","+"); //
System.out.println("***"+strFile);
byte[] decoded = DatatypeConverter.parseBase64Binary(strFile);
try (OutputStream stream = new FileOutputStream("path"+sdf.format(new Date()).toString()+".png")){
stream.write(decoded);
}
}
附上代码。有办法吗?
或许, 是否有高图表代码的base64编码?
如果可能,我会很感激,例如,解释代码。
感谢您的阅读。
度过美好的一天!
答案 0 :(得分:-1)
这是不可能的,因为必须先翻译和解释SVG,然后才能将其存储为PNG或其他图像格式。
您可以使用org.apache.batik
来实现转换效果,但是目前SVG转换程序受到限制,我也正在一起免费学习这一段。