Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Highcharts - export to base64

Is there a way to take a highcharts graph, and get a base64 representation of the it?

In other words, the equivalent of first exporting it to PNG or JPG (I don't care which) and then getting a base64 string of that image.

like image 878
Adam Rackis Avatar asked Jul 17 '12 20:07

Adam Rackis


3 Answers

here is how i solve it :

  • use google canvg It takes a URL to a SVG file or the text of an SVG file, parses it in JavaScript, and renders the result on a Canvas element.

  • render your chart svg to the canvas using

     canvg(document.getElementById('canvas'),getSVG());
    
  • convert what you have in the canvas to image

      var canvas = document.getElementById("canvas") ; 
      var img = canvas.toDataURL("image/png"); //img is data:image/png;base64
       img = img.replace('data:image/png;base64,', '');
    
  • render your image to a hidden field

      $("hidden field").val(img) ;
    
  • to convert this string to byte array do

     Dim imageFile() As Byte = Convert.FromBase64String(YOUR HIDDEN FIELD .Value)
    

UPDATE

get the highcharts SVG

  • use the chart.getSVG() method

Highcharts API

jsFiddle Example

  • or simply use $(your svg).html()
like image 139
Mina Gabriel Avatar answered Oct 21 '22 06:10

Mina Gabriel


First, see the highcharts documentation on exporting files. This will give you the string to the image URL you want.

Exporting: http://www.highcharts.com/ref/#exporting

Use an HTTP request (with AJAX, for instance) to get the file binary content (jpg/png) and transfer it to a base64 encoding library like this one:

Base64: http://www.webtoolkit.info/javascript-base64.html

Enjoy and good luck!

like image 33
Daniel Li Avatar answered Oct 21 '22 07:10

Daniel Li


You can directly get base64 from http://export.highcharts.com by passing required parameter in request.

let chartData = {
        infile: CHART_DATA,
        b64: true // Bool, set to true to get base64 back instead of binary.
        width: 600,
        constr : "Chart"
    }

You can use below snippet to get base64

fetch("https://export.highcharts.com/", {
  "headers": {
    "content-type": "application/json",
  },
  "body": "{\"infile\":\"{\\n    \\\"xAxis\\\": {\\n        \\\"categories\\\": [\\n            \\\"Jan\\\",\\n            \\\"Feb\\\",\\n            \\\"Mar\\\",\\n            \\\"Apr\\\",\\n            \\\"May\\\",\\n            \\\"Jun\\\",\\n            \\\"Jul\\\",\\n            \\\"Aug\\\",\\n            \\\"Sep\\\",\\n            \\\"Oct\\\",\\n            \\\"Nov\\\",\\n            \\\"Dec\\\"\\n        ]\\n    },\\n    \\\"series\\\": [\\n        {\\n            \\\"data\\\": [1,3,2,4],\\n            \\\"type\\\": \\\"line\\\"\\n        },\\n        {\\n            \\\"data\\\": [5,3,4,2],\\n            \\\"type\\\":\\\"line\\\"\\n        }\\n    ]\\n}\\n\",\"width\":600,\"constr\":\"Chart\",\"b64\":true}",
  "method": "POST",
  "mode": "cors"
}).then(function(response) {
    // The response is a Response instance.
    return response.text();
  }).then(function(data) {
    console.log(data);  //  base64 data
  }).catch(function(err) { console.log(err);})
like image 1
Rohit Kumar Avatar answered Oct 21 '22 05:10

Rohit Kumar