これはある種の特定の問題ですが、私が解決策を見つけることができれば、ある時点で他の誰かにとって役立つかもしれないと思います。
ブラウザ側でHighchartsグラフの一部をPNGに変換する必要があります。作成者がグラフを作成するときに、グラフは自動的にPNGに変換され、そのPNGは指定されたグラフのJSコードとともに保存されるという考え方です。次に、JSがオプションではない状況で、そのPNGバージョンを提供できます。私はこれをすべてcanvgライブラリを介して機能させており、完璧です。
よくほとんど。そこにあるすべての高dpi画面のために、グラフが通常表示される2倍の大きさのPNGを拡大する必要があります。そうすれば、PNGバージョンはiPhone/iPadなどで見栄えがします...
canvgにはいくつかのスケーリングオプションがあるので、それらを使用しようとしました。しかし、それはそれが崩壊し始めるところです。グラフは正しくスケーリングされますが、Highchartsオブジェクトのどこかに、他のすべてと一緒にスケーリングされないボックスがあり、結果のスケーリングされたグラフは、美しくスケーリングされたグラフの左上隅だけを示します。
私はcanvgコードを見て、JSの能力が何が起こっているのかを理解するのに十分ではないことにすぐに気づきました。これは、Highchartsの終わりでも同じです。
誰かがこれに対するアイデアを持っているか、簡単な解決策を知っているなら、私は非常に感謝するでしょう。
問題を再現するために、私がまとめたこのJSFIDDLEの例を見ることができます。
そして、そのJSFIDDLEページがめちゃくちゃになったり、何らかの理由で消えたりした場合のコードは次のとおりです。
<script src="http://code.highcharts.com/highcharts.js">http://code.highcharts.com/highcharts.js</script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/rgbcolor.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/canvg.js"></script>
<p>Highcharts</p>
<div id="container" style="height: 400px; margin-top: 1em"></div>
<p>Canvas</p>
<canvas id="canvas"></canvas>
<p>Image</p>
<div id="image"><div>
<script type="text/javascript">
$(function () {
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container'
},
credits: {
enabled: false
},
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: {
enabled: false
}
},
exporting: {
type: 'image/jpeg'
}
});
var chart_svg = chart.getSVG();
var chart_canvas = document.getElementById('canvas');
canvg(chart_canvas, chart_svg, {scaleWidth: 1280, scaleHeight: 860});
var chart_img = chart_canvas.toDataURL('image/png');
jQuery('#image').append('<img src="' + chart_img + '" />');
});
</script>