• Publicidad

No veo la ventana con GD

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

No veo la ventana con GD

Notapor ManuelPerl » 2013-09-07 11:29 @520

Hola, tengo un programa hecho con GD para ver líneas, rectángulos, etc., pero cuando lo ejecuto tan solo me sale la consola MSDOS, y no se abre ninguna ventana gráfica con el dibujo de las líneas y demás. No sé si es que hay que direccionar hacia un archivo, o hay que poner algo más, para que se vea el formulario con las líneas.

#!/usr/bin/perl -w
use GD::Simple;

$img = GD::Simple->new(640, 480);

$img->fgcolor('black');
$img->bgcolor('yellow');

$img->rectangle(10, 10, 50, 50);
$img->ellipse(50, 50);

$img->moveTo(200,25);
$img->font('Times:italic');
$img->fontsize(18);
$img->string('Drawn With Perl');

Este código tampoco se visualiza. Sale en la consola con caracteres y pitidos, pero no se abre ninguna ventana mostrando nada.

#!/usr/local/bin/perl -w
# Cambie la línea de arriba para que apunte a su binario de Perl


use CGI ':standard';
use lib '/cise/homes/ppadala/mydepot/lib/perl5/site_perl';
use GD::Graph::bars;
use strict;

# Ambos arrays deberían de tener el mismo número de entradas.
my @data = (['Fall 01', 'Spr 01', 'Fall 02', 'Spr 02' ],
[80, 90, 85, 75],
[76, 55, 75, 95],
[66, 58, 92, 83]);

my $mygraph = GD::Graph::bars->new(500, 300);
$mygraph->set(
x_label => 'Semester',
y_label => 'Marks',
title => 'Grade report for a student',
# Dibuja barras con una anchura de 3 pixels
bar_width => 3,
# Separa las barras 4 pixels
bar_spacing => 4,
# Muestra la rejilla
long_ticks => 1,
# Muestra los valores el lo alto de cada barra
show_values => 1,
) or warn $mygraph->error;

$mygraph->set(logo => 'lglogo.png');
$mygraph->set(logo_resize => 0.5);
$mygraph->set(logo_position => 'LL');
$mygraph->set_legend_font(GD::gdMediumBoldFont);
$mygraph->set_legend('Exam 1', 'Exam 2', 'Exam 3');
my $myimage = $mygraph->plot(\@data) or die $mygraph->error;
print "Content-type: image/png\n\n";
print $myimage->png;
ManuelPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-06-21 16:23 @724

Publicidad

Re: No veo la ventana con GD

Notapor explorer » 2013-09-07 11:40 @527

Las instrucciones de dibujo quedan almacenadas en el objeto $img. Lo que tienes que hacer luego es decidir adónde quieres sacar el resultado. Si quieres guardarlo a un archivo externo, debes realizar las operaciones clásicas de archivos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open my $PNG, '>', 'formulario.png';
  2. binmode $PNG;                          # la salida será en modo binario
  3. print   $PNG $img->png;                # volcamos el objeto GD a un archivo en formato png
  4. close   $PNG;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

y ya tienes creado el gráfico png en disco. Para verlo, usarás cualquier programa visor de archivos gráficos.

Con respecto al segundo programa: cada vez, que en un programa, veas las líneas

print "Content-type: ...

significa que la salida debe realizarse hacia un navegador web, no hacia consola, que no sabe qué hacer con esa información.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: No veo la ventana con GD

Notapor ManuelPerl » 2013-09-07 13:30 @604

En el segundo ejemplo, cuando lo ejecuto, no se abre el navegador. Se sigue abriendo la consola. Lo ejecuto desde el IDE padre.

Yo tengo instalado también xampp. ¿Será que hay que ejecutarlo en la carpeta htdocs para que asé se abra en el navegador? ¿Poniendo localhost:8080/programa/grafico.pl estoy en lo correcto?
ManuelPerl
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-06-21 16:23 @724

Re: No veo la ventana con GD

Notapor explorer » 2013-09-07 18:46 @823

Primero debemos aclararnos qué tipo de programa quieres hacer.

¿Es un programa que se va a ejecutar en la consola, o quieres que se ejecute por petición de un navegador web?

Por lo que comentas en estos dos últimos mensajes, más bien parece lo segundo.

Bueno, pues entonces la cadena de desarrollo que estás adoptando no es la correcta: no puedes ejecutar el programa desde Padre sin más, ya que Padre creerá que se trata de un programa de consola como otro cualquiera. No lanzará el navegador y dentro de él tu programa. Ahora desconozco si en las últimas versiones de Padre se puede hacer eso, lo de ejecutarlo en un navegador, pero apostaría a que no.

Como lo que quieres hacer es un CGI (programa que se ejecuta del lado de un servidor), debes comprobar que el Apache esté funcionando (en el XAMPP). Luego, debes averiguar en qué carpeta debes colocar los cgi (alguna carpeta, al lado de htdocs, que se llame cgi/, cgi-bin/ o algo parecido). Esto está indicado en la configuración de Apache, por si no terminas de encontrarla. O si quieres que sea otra la carpeta.

Colocas el programa en esa carpeta, arrancas el navegador web, y escribas en la línea de dirección una URL parecida a la que has escrito:

http://localhost/cgi-bin/programa.pl

Y si todo va bien, debería salir el gráfico.

localhost se refiere a tu propio ordenador. Si el servidor Apache está escuchando en un puerto distinto al 80, deberás indicarlo con ':' seguido del número de puerto.

cgi-bin/ es el nombre de la ruta que Apache reserva para la ejecución de cgi. Si no es esa, deberás consultar la configuración para saber qué otro nombre tiene.

programa.pl es tu programa. Aquí damos por supuesto que Apache entiende que la terminación pl significa "ejecutable", por lo que ejecutará el programa en lugar de mostrarlo tal cual (su código fuente). En otras ocasiones es necesario cambiar la terminación .pl por .cgi (lo mismo de siempre: esto se define en la configuración).

Mira, en mi Linux, he tenido que hacer algunas variaciones al código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use CGI ':standard';
  3. use CGI::Carp qw'fatalsToBrowser';
  4.  
  5. use GD::Graph::bars;
  6. use strict;
  7. use warnings;
  8. use diagnostics;
  9.  
  10. # Ambos arrays deberían de tener el mismo número de entradas.
  11. my @data = (
  12.     ['Fall 01', 'Spr 01', 'Fall 02', 'Spr 02' ],
  13.     [80, 90, 85, 75],
  14.     [76, 55, 75, 95],
  15.     [66, 58, 92, 83],
  16. );
  17.  
  18. my $mygraph = GD::Graph::bars->new(500, 300);
  19.  
  20. $mygraph->set(
  21.     x_label     => 'Semester',
  22.     y_label     => 'Marks',
  23.     title       => 'Grade report for a student',
  24.     # Dibuja barras con una anchura de 3 pixels
  25.     bar_width   => 3,
  26.     # Separa las barras 4 pixels
  27.     bar_spacing => 4,
  28.     # Muestra la rejilla
  29.     long_ticks  => 1,
  30.     # Muestra los valores el lo alto de cada barra
  31.     show_values => 1,
  32. ) or warn $mygraph->error;
  33.  
  34. #$mygraph->set(logo => 'lglogo.png');
  35. #$mygraph->set(logo_resize => 0.5);
  36. #$mygraph->set(logo_position => 'LL');
  37. $mygraph->set_legend_font(GD::gdMediumBoldFont);
  38. $mygraph->set_legend('Exam 1', 'Exam 2', 'Exam 3');
  39.  
  40. my $myimage = $mygraph->plot(\@data) or die $mygraph->error;
  41.  
  42. binmode STDOUT;
  43. print "Content-type: image/png\r\n\r\n";         # cuidado, esta línea debe ser distinta en Windows. Con "\n\n", vale.
  44. print $myimage->png;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
He tenido que instalar las distribuciones

libgd-perl
libgd-text-perl
libgd-graph-perl
- Aquí está definido el módulo GD::Graph::bars

pero ya sale bien:
Imagen
(esta imagen se está generando cada vez que se descarga esta página)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados

cron