这是一个特定的问题,但我想如果我能找到解决方案,它可能在某些时候对别人有用。highcharts和canvg缩放问题
我需要将我的一些Highcharts图转换成浏览器端的PNG。这个想法是,当我们的作者创建一个图形时,它会自动转换为PNG,并且该PNG将与给定图形的JS代码一起保存。然后,我们可以在JS无法选择的情况下提供该PNG版本。我已经通过canvg库完成了所有工作,而且非常完美。
好吧,差不多。由于所有高分辨率屏幕都存在,我们希望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>
斯科特,这正是我想做的事。最好的解决方案或不,它的作品。 :)出于某种原因,我没有想到在svg对象上引起问题的明确高度/宽度。 – 2013-03-26 20:51:03
而且要清楚。谢谢! – 2013-03-26 20:52:42