我正在使用HighCharts库生成一些动态图表。但是,我想将HighCharts画布元素渲染为PNG图像,这样用户就可以将图表复制并粘贴到电子邮件等中,而无需使用导出功能。
具体来说,我正在尝试创建一个包含图表的HTML电子邮件模板,并希望用户能够选择所有>复制/粘贴到他们的电子邮件客户端,而不是复制/粘贴,导出图像,然后找到将其插入电子邮件的方法。
我发现了这个:Capture HTML Canvas as gif/jpg/png/pdf?,但代码似乎没有将图像呈现给文档。
答案 0 :(得分:27)
Here's a hack如果您已经开始使用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+'"/>');
答案 1 :(得分:11)
我知道这是一个古老的问题,但是因为它在Google搜索结果中排名第一,我认为现在值得一提的是Highcharts natively supports a server-side image generation script并且效果很好。
答案 2 :(得分:8)
使用来自“Render charts on the server”(来自jkraybills answer)的信息,我使用Ajax创建了这个最小的示例,以获取尚未呈现的图表的图像,并将其显示在一个img
- 标记。
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);
}
});
与this JSFiddle demonstration一样。
POST参数的其余部分(width
,callback
...)为in the documentation。
答案 3 :(得分:6)
这是基于PhantomJS的服务器端解决方案。您可以使用JSONP对image.vida.io进行跨域调用。
您的图表/可视化需要从外部访问。您可以将凭据传递给URL。
然后你可以用img标签显示图像:
<img src="data:image/png;base64, [base64 data]"/>
它适用于浏览器。