Highcharts svg转换为png服务器

时间:2016-11-24 19:13:57

标签: svg highcharts png

我使用高级图表将图表转换为图像。

请给我一个答案。 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编码?

如果可能,我会很感激,例如,解释代码。

感谢您的阅读。

度过美好的一天!

1 个答案:

答案 0 :(得分:-1)

这是不可能的,因为必须先翻译和解释SVG,然后才能将其存储为PNG或其他图像格式。

您可以使用org.apache.batik来实现转换效果,但是目前SVG转换程序受到限制,我也正在一起免费学习这一段。