[caracas-pm] Mostrar una foto por tt2

Ernesto Hernández-Novich emhnemhn at gmail.com
Thu Mar 12 07:57:27 PDT 2009


On Wed, 2009-03-11 at 22:20 -0430, Sergio Necepurenko wrote:
> Buen día amigos, tiempo sin escribir.
> 
> Estoy tratando de hace lo siguiente:
> 
> my $buff=undef;
> open(my $hf,”unafoto.jpg”) or die "Can't open unafoto.fpg file for read: 
> $!\n";
> binmode $hf;
> $buff.=$_ while (<$hf>);
> close($hf);
> $ver{foto}=$buff;
> para después mostrarla en un template:
> <img align="[% align %]" border="[% border %]" src="[% foto %]">
> 
> cuando visualizo me muestra es el contenido de la foto y no la imagen en si.

Correcto. Porque src debe ser un URL a una imagen. Un documento HTML no
incluye las imágenes en línea, sino que hace referencia a ellas. Los
navegadores al analizar el HTML notan que hay referencias a las
imágenes, las buscan y las incluyen. Tu programa no esta generando una
referencia a una imagen, sino poniendo los bytes de la imagen en el
lugar donde debería estar una referencia. Eso no funciona.

> Como se puede hacer para que <img ..... > me muestre la foto a travéz de 
> una variable?? .

Si la foto siempre estará en unafoto.jpg, entonces simplemente pon ese
nombre en $ver{foto} para que termine en la plantilla como
"src=unafoto.jpg".

Si lo que pretendes es que la foto se lea de una base de datos o bien se
trata de una imagen generada (un gráfico, por ejemplo), entonces como
src tiene que ser un URL, lo que debes hacer es

$ver{foto} = '/cgi-bin/generafoto.pl'

y escribir el programa generafoto.pl para que emita la foto por la
salida estándar después de emitir el tipo MIME adecuado, e.g.

print "Content-type: image/png\n\n";
# instrucciones para leer la foto de un archivo o 
# generarla y poner sus contenidos en la variable $img ...
binmode STDOUT;
print $img

De ese modo, la plantilla va a generar un HTML válido que en src tiene
una _referencia_ al programa que genera la foto. El navegador invocará a
dicho programa a través del servidor Web para poder obtener la imagen.
Nota que el tipo MIME depende de la imagen que vas a generar, así que
posiblemente te interese utilizar Template::Plugin::Image que incluye
funciones para determinar los atributos de la imagen, incluyendo su
resolución y tipo MIME.

Para mayor flexibilidad, el programa debería ser parametrizable de
manera que le puedas indicar cuál foto buscar o como generarla, e.g.

/cgi-bin/generafoto?id=42
-- 
Ernesto Hernández-Novich - Linux 2.6.28 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't aptitude it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3




More information about the caracas-pm mailing list