non ero felice con una qualsiasi di queste soluzioni a causa dei seguenti problemi:
- mie etichette delle tacche non sono sulla tela
- mie etichette degli assi non sono sulla tela
- Il salvataggio di Firefox con canvas2image è confuso per un utente normale
La mia soluzione a questo problema è di cambiare il opzioni per il grafico da sostituire come grafico solo su tela, quindi utilizzare canvas-to-blob per convertire questo grafico in un blob, quindi FileSaver per salvare il blob per l'utente, infine sostituisco il grafico dopo aver salvato l'immagine.
richiede i seguenti plugin JS:
Codice:
//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();
}
Forse se si hanno preoccupazioni simili sulle soluzioni di cui sopra, si può provare questo.
Impossibile trovare la funzione .getCanvas(). Potresti dare il suo codice per favore? – user1874941
@ user1874941: Ho aggiornato la mia risposta –
Ho fatto var myCanvas = plot.getCanvas(); myCanvas.toDataURL ("image/png"); tuttavia non salva alcuna immagine. non c'è errore pure. – user1874941