Foros del Web » Programando para Internet » PHP » CodeIgniter »

CodeIgniter y JpGraph

Estas en el tema de CodeIgniter y JpGraph en el foro de CodeIgniter en Foros del Web. Hola, necesito ayuda, estoy utilizando la libreria JpGraph para generar gráficos, actualmente genero imágenes para luego cargarlas en la vista. pero lo que quiero es ...
  #1 (permalink)  
Antiguo 25/06/2013, 12:15
 
Fecha de Ingreso: mayo-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta CodeIgniter y JpGraph

Hola, necesito ayuda, estoy utilizando la libreria JpGraph para generar gráficos, actualmente genero imágenes para luego cargarlas en la vista.

pero lo que quiero es generar directamente al navegador.

he buscado en internet, y encontre que cargan el archivo php, el cual genera el grafico.
<img src="archivo_grafico.php">

y lo que imprime es lo siguiente: ?PNG

Como puedo generar directamente, sin guardar imágenes.
  #2 (permalink)  
Antiguo 25/06/2013, 14:14
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: CodeIgniter y JpGraph

A la hora de crear imágenes dinamicamente lo que se hace es colocar un header al principio del código que indique que el contenido va a ser una imagen, por lo que el navegador ignorará la extensión y tratará al archivo como tal.

Código PHP:
Ver original
  1. header( 'Content-type: image/png' );

Después, utilizando las funciones de imagenes en PHP se suele crear una imagen y hacerla PNG con la función imagepng();

Buscando por la documentación de JpGraph he encontrado el siguiente código que parece hacer lo que tu buscas, aunque eso sí, esta un poco sucio y ilegible.

Código PHP:
Ver original
  1. // Assume we would like to combine graph1,2 and 3
  2. // ...... create graph 1 here.......
  3. $handle1 =  $graph1->Stroke( _IMG_HANDLER);
  4.  
  5. // ...... create graph 2 here.......
  6. $handle2 =  $graph2->Stroke( _IMG_HANDLER);
  7.  
  8. // ...... create graph 3 here.......
  9. $handle3 =  $graph3->Stroke( _IMG_HANDLER);
  10.  
  11.  
  12. // Now create the "melting graph" which should contain all three graphs
  13. // $WIDTH1 and $HEIGHT1 are width and height of graph 1 ($handle1)
  14. // $WIDTH2 and $HEIGHT2 are width and height of graph 2 ($handle2)
  15. // $WIDTH3 and $HEIGHT3 are width and height of graph 3 ($handle3)
  16. // $x2,$x3 and $y2,$y3 shift from top left of global graph (ie position of
  17. // graph2 and graph3 in global graph)
  18.  
  19. $image = imagecreatetruecolor($WIDTH1,$HEIGHT1);
  20. imagecopy($image, $handle1,0, 0, 0, 0, $WIDTH1,$HEIGHT1);
  21. imagecopy($image, $handle1,$x1,$y1,0,0,$WIDTH2,$HEIGHT2);
  22. imagecopy($image, $handle1,$x2,$y2,0,0,$WIDTH3,$HEIGHT3);
  23.  
  24. // Stream the result back as a PNG image
  25. header("Content-type: image/png");
  26. imagepng ($image);

Básicamente lo que hace es crear una imagen con la librería JpGraph, y después crea otro lienzo con las funciones nativas de PHP para imagenes. Al final con imagecopy copia la imagen del gráfico al lienzo.

Si me muestras tu código quizá pueda pasartelo adaptado. Saludos.
  #3 (permalink)  
Antiguo 25/06/2013, 15:53
 
Fecha de Ingreso: mayo-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: CodeIgniter y JpGraph

hola, gracias por responder.
este es el código que utilizo.
codigo php para generar el grafico, esta en una clase que hereda de jpgraph
Código PHP:
Ver original
  1. public function Graficar_barras($titulo, $datos, $etiquetas, $nombre, $id) {
  2. // Creamos el grafico
  3.         $grafico = new Graph(200, 140);
  4.         $grafico->SetScale('textint');
  5. // Ajustamos los margenes del grafico-----    (left,right,top,bottom)
  6.         $grafico->SetMargin(0, 0, 20, 20);
  7. // Creamos barras de datos a partir del array de datos
  8.         $bplot = new BarPlot($datos);
  9. // Configuramos color de las barras
  10.         $bplot->SetFillColor('#003399');
  11. //Añadimos barra de datos al grafico
  12.         $grafico->Add($bplot);
  13. // Queremos mostrar el valor numerico de la barra
  14.         $bplot->SetWidth(0.6);
  15.         $bplot->value->SetFont(FF_ARIAL, FS_NORMAL, 7);
  16.         $bplot->value->SetFormat("%.0f");
  17.         $bplot->value->SetColor("#000000");
  18.         $bplot->value->Show(TRUE);
  19.  
  20.  
  21.         $grafico->xaxis->SetTickLabels($etiquetas);
  22.         $grafico->ygrid->SetFill(FALSE);
  23. // Configuracion de los titulos
  24.         $grafico->title->Set($titulo, "high");
  25.         $grafico->title->SetFont(FF_VERDANA, FS_BOLD, 8);
  26.         $grafico->yaxis->SetFont(FF_ARIAL, FS_NORMAL, 6);
  27.         $grafico->yaxis->SetLabelFormatCallback("number_format");
  28.         $grafico->yaxis->SetLabelMargin(0);
  29.         $grafico->yaxis->title->Set('');
  30.         $grafico->yaxis->title->SetFont(FF_FONT1, FS_BOLD);
  31.         $grafico->xaxis->title->Set('');
  32.         $grafico->xaxis->title->SetFont(FF_FONT1, FS_BOLD);
  33.         $grafico->ygrid->Show(FALSE);
  34.  
  35.  
  36.         if (!is_dir("./images/graficos/" . $id)) {
  37.             mkdir("./images/graficos/" . $id);
  38.         }
  39.         @unlink("./images/graficos/" . $id . "/" . $nombre . ".jpg");
  40.         $grafico->Stroke("./images/graficos/" . $id . "/" . $nombre . ".jpg");
  41.         echo "<img src='./images/graficos/" . $id . "/" . $nombre . ".jpg'/>";
  42.     }


codigo de la vista donde llamo al grafico

Código PHP:
Ver original
  1. $ci = &get_instance();
  2. $ci->load->library("graficar");
  3. $ci->graficar->Graficar_barras("Beneficiarios", array(100,200,150), array("2010","2011","2012"), "barra2", "id_1");
  #4 (permalink)  
Antiguo 26/06/2013, 07:45
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: CodeIgniter y JpGraph

Mira el ejemplo que hice, al final no me ha hecho falta ni colocar el header ni darle tantas vueltas a la imagen como en el ejemplo de arriba.

graph.php
Código PHP:
Ver original
  1. <?php
  2. require_once 'library/src/jpgraph.php';
  3. require_once 'library/src/jpgraph_bar.php';
  4.  
  5. $graph = new Graph(200, 140);
  6.  
  7. $graph->SetScale( 'textint' );
  8. $graph->SetMargin( 0, 0, 20, 20 );
  9.  
  10. $barplot = new BarPlot( array( 100, 200, 150 ) );
  11.  
  12. $barplot->SetFillColor( '#003399' );
  13.  
  14. $graph->Add( $barplot );
  15.  
  16. // header( 'Content-type: image/png' );
  17. $graph->Stroke();
  18. ?>

index.html
Código HTML:
Ver original
  1. <img src="graph.php" alt="Graph">

He estado leyendo la documentación y pone que si al método Graph::Stroke no le pasas ningún argumento no guardará la imagen y la mostrará en el navegador.

El modo largo es el siguiente, hace lo mismo que el código de arriba pero con la diferencia de que podrías usar la imagen en un PDF o algo.

img.php
Código PHP:
Ver original
  1. <?php
  2. require_once 'library/src/jpgraph.php';
  3. require_once 'library/src/jpgraph_bar.php';
  4.  
  5. $graph = new Graph(200, 140);
  6.  
  7. $graph->SetScale( 'textint' );
  8. $graph->SetMargin( 0, 0, 20, 20 );
  9.  
  10. $barplot = new BarPlot( array( 100, 200, 150 ) );
  11.  
  12. $barplot->SetFillColor( '#003399' );
  13.  
  14. $graph->Add( $barplot );
  15.  
  16. $handle = $graph->Stroke( _IMG_HANDLER );
  17.  
  18. $img = imagecreatetruecolor( 200, 140 );
  19. imagecopy( $img, $handle, 0, 0, 0, 0, 200, 140 );
  20.  
  21. header( 'Content-type: image/png' );
  22. imagepng( $img );
  23. ?>

No he conseguido que la imagen se guarde y se muestre a la vez, aunque supongo que invocando Graph::Stroke dos veces (una con una ruta y la otra con el parámetro vacío) se podrá.

Espero que te funcione así. Saludos.
  #5 (permalink)  
Antiguo 26/06/2013, 08:30
 
Fecha de Ingreso: mayo-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: CodeIgniter y JpGraph

gracias, pero no me funciona me aparece ?PNG.

cuando lo uso dentro de CodeIgniter me arroja esto, pero si lo utilizo con php nativo funciona perfecto
  #6 (permalink)  
Antiguo 26/06/2013, 09:29
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: CodeIgniter y JpGraph

Me he quedado en blanco, a ver si algún otro usuario puede ayudarte.

Prueba a definir los header necesarios, quizá sea por eso que el navegador no reconoce la imagen o algo.

Código PHP:
Ver original
  1. $CI->output->set_content_type( 'png' );
  2. // O bien.
  3. $CI->output->set_content_type( 'jpeg' );

Prueba con las dos a ver. Saludos.
  #7 (permalink)  
Antiguo 26/06/2013, 10:35
 
Fecha de Ingreso: mayo-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: CodeIgniter y JpGraph

probé con esto y nada.
Código PHP:
Ver original
  1. $CI->output->set_content_type( 'png' );
  2. // O bien.
  3. $CI->output->set_content_type( 'jpeg' );

tu lo probaste en CodeIgniter y te funciono, me podrías enviar el código completo en CodeIgniter por favor.
  #8 (permalink)  
Antiguo 26/06/2013, 10:43
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: CodeIgniter y JpGraph

No lo probé en CI, daba por supuesto que no daría ningún error. No se de donde puede venir.
Saludos.

Etiquetas: jpgraph
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:44.