我卻高興不起來與任何這些解決方案由於以下問題:
- 我的刻度標記不在畫布上
- 我的軸標籤都沒有在畫布上
- 使用canvas2image保存的Firefox對於普通用戶來說是個迷惑
我對此問題的解決方法是更改圖表的選項可以重新繪製爲僅限於畫布的圖表,然後使用畫布到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();
}
也許如果您對上述解決方案有類似的擔憂,您可以試試這個。
我找不到.getCanvas()函數。你可以給它的代碼嗎? – user1874941 2013-03-25 14:15:24
@ user1874941:我更新了我的答案 – 2013-03-25 14:21:44
我做了var myCanvas = plot.getCanvas(); myCanvas.toDataURL(「image/png」);但它不保存任何圖像。也沒有錯誤。 – user1874941 2013-03-25 14:39:16