将前端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文件使用。
最近由于业务需要,需要将前端查询的数据在浏览器上以图片的形式展示,然后回传到后台供导出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图片时报错"*** missing separator. Stop."的原因
- 在 Java 中把 .NET 使用 Convert.ToBase64String 转换出的 Base64 字符串还原成图片
- HTML5/CSS3系列教程:使用SVG图片
- HTML5/CSS3系列教程:使用SVG图片
- HTML5/CSS3系列教程:使用SVG图片
- HTML5/CSS3系列教程:使用SVG图片
- 在模板类中使用字符串作为无类型模板参数
- 前端性能优化:使用Array.prototype.join代替字符串连接
- 前端性能优化:使用Data URI代替图片SRC
- 前端性能优化:使用Data URI代替图片SRC
- 前端性能优化:使用媒体查询加载指定大小的背景图片
- 前端性能优化:使用媒体查询加载指定大小的背景图片
- 前端性能优化:使用Data URI代替图片SRC
- 图片、浏览器-HTML5/CSS3系列教程:使用SVG图片-by小雨
- Web前端开发之——表格高级排序(字符串,日期,整型,浮点型,以及图片等)
- 前端性能优化:使用媒体查询加载指定大小的背景图片
- 帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
- 前端性能优化:使用Array.prototype.join代替字符串连接
- 使用字符串作为函数模板的实参
- HTML5/CSS3系列教程:使用SVG图片