您的位置:首页 > Web前端

将前端svg图片存为字符串,供world模板使用

2018-03-09 15:49 471 查看
转载请注明:https://blog.csdn.net/qfashly/article/details/79498524

最近由于业务需要,需要将前端查询的数据在浏览器上以图片的形式展示,然后回传到后台供导出world使用;如果将图片存为文件形式,则性能和效率太差,所以使用highcharts.js将数据渲染成图片,再使用js将svg图片传回,使用Base64将svg转换成String,供导出world文件使用。

//向后台提交svg数据
var chartDivArr = $("div.img");
for ( var i = 0; i < chartDivArr.length; i++) {
var chartDiv = $(chartDivArr[i]);
var chart_img = chartDiv.highcharts();
var svg_img = chart_img.getSVG();
var img_id = chartDiv.attr("id");
var svg = $('<input type="text" style="display: none;"/>');
svg.attr("id", img_id);
svg.attr("name", img_id);
svg.attr("value", svg_img);
myform.append(svg);
}


//处理前台传回的图片
Map<String, String> charts = new HashMap<>();
String svgCode = "";
String pngBase64 = "";
Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> parameter : parameterMap.entrySet()) {
if (parameter.getKey().startsWith("img")) {
svgCode = parameter.getValue()[0];
pngBase64 = SvgPngConverter.convertToPngBytesBase64(svgCode);
charts.put(parameter.getKey(), pngBase64);
}
}


/**
* 把svg图片编码转换为png格式图片的base64编码
* @param svgCode
* @return
*/
public static String convertToPngBytesBase64(String svgCode) {
try {
byte[] bytes = svgCode.getBytes("UTF-8");
PNGTranscoder t = new PNGTranscoder();
t.addTranscodingHint(PNGTranscoder.KEY_DEFAULT_FONT_FAMILY, "宋体");
t.addTranscodingHint(PNGTranscoder.KEY_LANGUAGE, "zh_cn");
t.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(1000.0));//只要指定宽度即可,高度自动调整。
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
TranscoderInput input = new TranscoderInput(bais);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
TranscoderOutput output = new TranscoderOutput(baos);
t.transcode(input, output);
baos.flush();
byte[] pngBytes = baos.toByteArray();
byte[] pngBase64Bytes = Base64.encodeBase64Chunked(pngBytes);
IOUtils.closeQuietly(bais);
IOUtils.closeQuietly(baos);
return new String(pngBase64Bytes).trim();
} catch (Exception e) {
logger.warn("cover svg to pngbase64 fail", e);
return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  svg装字符串