2011-03-28 20 views
13

Estoy haciendo una aplicación en la que necesitaría guardar el gráfico de Google como una imagen. Todo lo que estoy usando es tomcat, servlets y javascript. ¿Hay alguna manera de guardar el siguiente gráfico generado como una imagen? (refiérase al código al final de la publicación). La idea es que el usuario vea esta tabla y luego tenga la opción de subirla a su perfil de Facebook. No estoy seguro de si esto se podrá descargar en Facebook en su formato nativo o será necesario guardarlo como un jpg.¿Es posible guardar un gráfico de Google como una imagen?

<html>  
<head> 
<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
    google.load("visualization", "1", {packages:["corechart"]}); 
    google.setOnLoadCallback(drawChart); 
    function drawChart() { 
    var data = new google.visualization.DataTable(); 

    data.addColumn('string', 'Year'); 
    data.addColumn('number', 'Sales'); 
    data.addRows(4); 
    data.setValue(0, 0, ''+2004); 
    data.setValue(0, 1, 1000); 
    data.setValue(1, 0, '2005'); 
    data.setValue(1, 1, 1170); 
    data.setValue(2, 0, '2006'); 
    data.setValue(2, 1, 860); 
    data.setValue(3, 0, '2007'); 
    data.setValue(3, 1, 1030.5); 

    var chart = new google.visualization.LineChart(document.getElementById('chart_div')); 
    chart.draw(data, {width: 400, height: 240, title: 'Company Performance',hAxis: {title: "X", titleTextStyle: {color: "green"}}}); 
    } 

</script> 
    </head> 

    <body> 
    <div id="chart_div"></div> 
    </body> 
</html> 
+0

es que la aplicación integrada con Facebook y puede subir fotos a la cuenta de Facebook a través de la API? si no, el usuario tiene que usar la carga de facebook para hacerlo. en cuyo caso tienen que hacer clic derecho en la imagen del gráfico, guardar como, y luego subirlo a Facebook. –

+0

si ejecuta el violín mientras se está cargando, verá que simplemente carga una imagen de Google. Hacer que su servidor haga una solicitud http a esa misma url de imagen permitirá que su servidor descargue la imagen directamente desde google y haga lo que quiera con ella. –

+0

Para cualquiera que todavía esté buscando la respuesta, consulte: https://gist.github.com/1333906 – undsoft

Respuesta

1

Su opción más simple es regenerar una versión de imagen estática de la tabla utilizando la solución Ejemplo Google Chart API

+6

Esta API quedó en desuso el 20 de abril de 2012. (Después de que se publicó esta respuesta). Hay una nueva API de gráficos, pero no admite imágenes estáticas. https://developers.google.com/chart/ – dana

7

de Riccardo Govoni como se ve en la página de problemas de gráficos de Google. La idea es convertir el SVG al elemento Canvas.

Enlaces:

Tutorial: http://www.battlehorse.net/page/topics/charts/save_google_charts_as_image.html

Ejemplo de página: http://www.battlehorse.net/attach/topics/charts/google_charts_to_image.html

+6

Ya no funciona. :( –

+4

Parece que hay una versión que funciona en este [jsfiddle] (http://jsfiddle.net/SCjm8/1/) – mgilson

+0

Aquí se explica cómo configurar el nombre y la extensión del archivo: http://stackoverflow.com/questions/7717851/save-file-javascript-with-file-name – Owen

1

utilizar la biblioteca grChartImg. Es una solución de navegador cruzada de George Risvas. Soporta todos los navegadores, incluyendo versiones antiguas de IE y le proporciona muchos procedimientos de auto como convertir un gráfico de la imagen, descargar, mostrar un gráfico a un diálogo, subirlo a un servidor etc.

Para más información mira www.chartstoimage .

Espero que lo ayuden.

12

Parece que esta característica fue recientemente agregado como:

chart.getImageURI() 

Véase el documentation.

Parece que se ha agregado en la versión del 29 de enero de 2014.

+0

¿Esto ha desaparecido? – Jglstewart

+0

@Jglstewart - Ciertamente espero que no ...: -/ – mgilson

+0

No es así. Mi gráfico era un ChartWrapper que estaba causando un error de función indefinida. Para resolver el problema, utilicé chart.getChart.getImageURI(); – Jglstewart

0

En primer lugar, descargar esta biblioteca:

http://danml.com/download.html

y después de que acaba de añadir un detector de eventos dentro de su carta

function: 
google.charts.setOnLoadCallback(drawVisualization); 

    function drawVisualization() { 

var chart = new google.visualization.ComboChart(document.getElementById('chart_tickets')); 
    google.visualization.events.addListener(chart, 'ready', function() { 

    $("#GraphDownloadTickets").click(function() { 
     download(chart.getImageURI(), 'fileName.png', "image/png") 

    }); 
} 
Cuestiones relacionadas