HighChartsライブラリを使用して動的なグラフを生成しています。ただし、ユーザーがエクスポート機能を使用せずにグラフをコピーしてメールなどに貼り付けることができるように、HighChartsキャンバス要素をPNG画像としてレンダリングしたいと思います。
具体的には、グラフを含むHTMLメールテンプレートを作成しようとしています。ユーザーがすべてを選択できるようにしたい>コピー/貼り付けではなく、メールクライアントにコピー/貼り付け、画像をエクスポートしてから、メールに挿入してください。
私はこれを見つけました: Capture HTML Canvas as gif/jpg/png/pdf? ですが、コードはドキュメントに画像をレンダリングしないようです。
これがPhantomJSに基づくサーバー側のソリューションです。 JSONPを使用して、クロスドメインでimage.vida.ioを呼び出すことができます。
チャート/視覚化は外部からアクセスできる必要があります。資格情報をURLに渡すことができます。
次に、imgタグで画像を表示できます。
<img src="data:image/png;base64, [base64 data]"/>
ブラウザ全体で機能します。
これがハックです HighChartsの使用に心を決めている場合。 canvg を使用してSVGをキャンバスに解析し、キャンバスをPNGに変換します。
chart = new Highcharts.Chart({
chart: {
renderTo: 'container'
},
title: {
text: ''
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}],
navigation: {
buttonOptions: {
align: 'center'
}
}
});
canvg(document.getElementById('canvas'), chart.getSVG())
var canvas = document.getElementById("canvas");
var img = canvas.toDataURL("image/png");
document.write('<img src="'+img+'"/>');
" サーバー上のチャートのレンダリング "( jkraybillsの回答 から)の情報を使用して、Ajaxを使用してこの最小限の例を作成し、レンダリングされず、img
- tagで表示されます。
HTML:
<img id="chart" style="width: 600px;" />
JavaScript:
// Regular chart options
var options = {
title: {
text: 'My chart'
}
...
}
//URL to Highcharts export server
var exportUrl = 'http://export.highcharts.com/';
//POST parameter for Highcharts export server
var object = {
options: JSON.stringify(options),
type: 'image/png',
async: true
};
//Ajax request
$.ajax({
type: 'post',
url: exportUrl,
data: object,
success: function (data) {
// Update "src" attribute with received image URL
$('#chart').attr('src', exportUrl + data);
}
});
このJSFiddleのデモ のように。
POSTパラメータ(width
、callback
...)の残りの部分は ドキュメント内 です。