由于以下问题,我对这些解决方案中的任何一个都不满意:
- 我的刻度标签不在画布上
- 我的轴标签不在画布上
- Firefox 使用 canvas2image 保存对于普通用户来说是令人困惑的
我对这个问题的解决方案是更改图表的选项以重新绘制为仅画布图表,然后使用 canvas-to-blob 将此图表转换为 blob,然后 FileSaver 为用户保存 blob,最后我重新绘制图表保存图像后。
需要以下 JS 插件:
代码:
//set data array, and options
$('a.download_as_img').click(function(e){
e.preventDefault();
saveAsImage(graph_selector, data, options, xaxis,yaxis)
})
function saveAsImage(graph_selector, data_arr, options, xaxis, yaxis){
var canvas = replotChartAsCanvas(graph_selector, data_arr, options, xaxis, yaxis);
var title = 'chart';// or some jquery way to get your title or w/e
canvas.toBlob(function(blob) {
saveAs(blob, title + ".png");
});
//convert back to normal
var plot = $.plot(graph_selector, data_arr, options);
}
//helper for saveAsImage
// returns canvas
function replotChartAsCanvas(graph_selector, data_arr, options, xaxis, yaxis){
//change canvas options to true and replot
var canvas_options = {
canvas: true,
axisLabels: {
show: true
},
xaxes: [
{
axisLabelUseCanvas: true,
axisLabel: xaxis
}
],
yaxes: [
{
axisLabelUseCanvas: true,
position: 'left',
axisLabel: yaxis
}
]
}
var merged_opts = {}
$.extend(merged_opts, options, canvas_options); //done this way to ensure canvas_options take priority
var plot = $.plot(graph_selector, data_arr, merged_opts);
return plot.getCanvas();
}
也许如果您对上述解决方案有类似的担忧,您可以试试这个。