martes, 23 de julio de 2013

JpGraph: Como guardar la gráfica en un archivo tipo PNG (imagen)

Hola  saludos a todos, antes de empezar quiero aclarar que  en esta entrada solo vamos a ver algunas lineas que nos ayudarán a que la gráfica que hemos creado se almacene en alguna ruta con formato PNG para poderla visualizar posteriormente o cargarla posterirmente más fácil. Así que, si lo que deseas querido lector es saber como crear la gráfica te recomiendo que visites las otras entradas del blog.

Ahora por que queremos guardarla como imagen, ¿Que no ya es una imagen? hasta ahorita se podría decir que no, por que como lo hemos estado manejando, la ruta que le damos al objeto <img> es la del archivo php en donde generamos la gráfica, cada que queremos ver la gráfica se desarrolla todo el proceso, y si tienes varias gráficas que serán estáticas pues lo mejor es correr un solo proceso generar la imagen y solo cargar la imagen o tambien te puede servir en el caso de que quieras dar la opción de descargar la gráfica. Como en todos los casos esto es solo un ejemplo y tienes un mar de opciones para hacer con el.

Lo que vamos a conseguir en este ejemplo es que cada que corramos la gráfica nos va a generar un archivo PNG con la imagen (mientras no cambiemos el nombre nos estará reemplazando la imagen).



Ok esto es muy sencillo lo único que tenemos que agregrar al código en el archivo php que genera la gráfica son las siguientes lineas


$grafico->Stroke(_IMG_HANDLER);

$fileName = "grafica1.png";
$grafico->img->Stream($fileName);

// mostrarlo en el navegador
$grafico->img->Headers();
$grafico->img->Stream();



Bueno dejen les explico un poquito, lo que hicimos fue que dentro del Stroke() agregamos _IMG_HANDLER  esto nos permitirá poder "manejar" mejor nuestra imagen, indicarle el nombre y la extensión que nosotros queremos. Tambien se puede usar _IMG_AUTO_  pero con esta opción la imagen nos la guardará con el nombre del arhcivo PHP y con la extensión que se le haya asignado desde el archivo de configuración, por eso mejor el HANDLER, además de que claro realiza de manera internas otras funciones de la librería. 

Ahora, tenemos una variable $fileName en donde alamcenamos  ruta,nombre y extensión  que tendrá nuestra imagen. Yo le estoy indicando que se va a generar en la misma ruta que el archivo que se esta corriendo pero si lo que quieres es tener una carpeta específica con las imagenes, aquí es donde lo tienes que especificar por ejemplo: $fileName="imagenes/grafica1.png" 

Ahora le vamos a indicar al objeto $grafico la imagen que queremos que almacene y despues lo mandamos al navegador, para eso mandamos llamar las cabeceras de la imagen para que se pueda visualizar y la volvemos a cargar con Stream().

El código completo quedaría de la siguiente manera.

<?php
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_bar.php');

$idind = array("y1","y2","y3","y4");
$s1 = array("7","10","25","30");

$grafico = new Graph(500,500,'auto');
$grafico -> SetScale("textlin");
$grafico -> title -> Set ("GRAFICA DE PRUEBA");
$grafico -> yaxis -> title -> Set ("VALOR DE REFERENCIA");
$grafico -> xaxis -> title -> Set ("INDICADORES");
$grafico->xaxis->SetTickLabels($idind);

$bp=new BarPlot($s1);
$bp->SetFillColor("#00CC00");
$bp->SetWidth(35);
$bp->value->Show();

$grafico->Add($bp);

$grafico->Stroke(_IMG_HANDLER);

$fileName = "grafica1.png";
$grafico->img->Stream($fileName);

// Mandarlo al navegador
$grafico->img->Headers();
$grafico->img->Stream();

?>
 

Al correr el código mostraría la gráfica automáticamente y si ves tu carpeta (según la ruta que hayas dado en $fileName) deberá de aparecer la imagen.



Ahora ya puedes experimentar  mezclando ejemplos pasandole el nombre a la imagen por medio de parámetros para que sea dinámica tanto los valores como la imagen.

Espero que este ejemplo te sirva, no dudes en dejar tus comentarios, dudas, quejas, sugerencias o si le detectas algún error al código. Saludos y disfruten sus vacaiones a quienes las tengan. XD

"Programar no tiene que ser tan difícil como parece...."

11 comentarios:

  1. Muy buen tutorial, es muy util, he sacado varios ejemplos tuyos para un sistema que estoy haciendo con unos compañeros de universidad.

    Saludos!

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu comentario , me da mucho gusto saber que los ejercicios les ayuden en sus proyectos.

      Eliminar
  2. Estoy tratando de hacer tu ejemplo y luego adaptarlo a lo que necesito, pero me dice este error Can't write to file "Grafica1.png". Check that the process running PHP has enough permission.
    Cómo puedo solucionar ese problema? Espero me puedas ayudar

    ResponderEliminar
    Respuestas
    1. checa que tengas permisos para escribir en la carpeta!!

      Eliminar
  3. Me ayudó mucho. Gracias.

    ResponderEliminar
  4. buenos dias, Gracias por cmpartir tus conocimientos, como haría para enviarla a otra dirección (carpeta) y colocarle un nombre antes de guardarla, imagino que tendría que ser desde otro archivo llamando a este pero no tengo mucha pericia en este asunto

    ResponderEliminar
  5. en la variable $filename indica toda la ruta de donde la quieres guardar con todo y nombre por ejemplo C:\\imagenes\grafica.png

    ResponderEliminar
  6. buen tutorial pero al poner el nombre del archivo con ruta no funciona, saludos, gracias

    ResponderEliminar
  7. Un metodo mas facil seria poner la linea $myPicture->Render("example1.png"); y ya con eso se generaria la imagen , respetando los colores y demas cosas que tenga

    ResponderEliminar