Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Imágenes

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> HTML
Mensaje Mie May 16, 2007 2:08 pm
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
Imágenes Responder citando

¿Cómo le asigno una imagen a una variable? Lo que quiero es guardar la referencia en un campo de una tabla en mysql y después poder asignarla a una variable para poder mandarla a imprimir en pantalla.
Mensaje Mie May 16, 2007 3:50 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4091
Ubicación: Valladolid, España
Responder citando

Leyendo la imagen como un fichero binario... nada más después de hacer el open(), haces un binmode() y a partir de ahí ya puedes hacer un read() del fichero de la imagen a la variable escalar tuya.
Mensaje Mie May 16, 2007 5:28 pm
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
Imagenes Responder citando

Podrías poner la idea con código, por favor.
Mensaje Mie May 16, 2007 6:53 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4091
Ubicación: Valladolid, España
Responder citando

De memoria (no probado):

Perl:
open my $Imagen, '<', 'imagen.jpg' or die "ERROR: No puedo leer la imagen: $!\n";

binmode($Imagen);
my $bufffer;
my $img;
while ( read($Imagen, $buffer, 1024) ) {
    $img .= $buffer;
}

close $Imagen;

Por este foro hay más ejemplos con binmode. Usa el sistema de búsqueda. En la parte de Tutoriales hay uno con algo parecido: http://perlenespanol.baboonsoftware.com/tutoriales/graficosimagenes/guardar_imagenes_en_una_base_de_datos.html
Mensaje Jue May 17, 2007 8:30 am
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
Imágenes Responder citando

¿Cómo le asigno la referencia de la imagen a $imagen?
Mensaje Jue May 17, 2007 4:10 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4091
Ubicación: Valladolid, España
Responder citando

Perl:
$imagen = '/camino/a/la/imagen.jpeg';
Mensaje Mar May 22, 2007 11:37 am
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
Imagenes Responder citando

Estoy haciéndolo de la siguiente manera y no funciona, puedes apoyarme por favor.
La intención es guardar la referencia por ejemplo el C\winnt\... en un registro de una base de datos, y dependiendo de la consulta se le asigne esa referencia a la variable e imprima en pantalla esa imagen, las imágenes estarían en una carpeta en el servidor:

Perl:
# asigno la imagen a una variable
$prueba='c:\WINNT\Temp\advertencia.gif';

binmode (STDOUT);       
print "content-type:image/gif\n\n";

print "$prueba";


la mando a imprimir pero me imprime: c:\WINNT\Temp\advertencia.gif
Mensaje Mar May 22, 2007 12:42 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4091
Ubicación: Valladolid, España
Responder citando

Tienes que hacer el open,while,read,close que te pongo más arriba, y luego, con toda la imagen leída en la varible $img, ya puedes sacarla hacia fuera, con un print $img;

Perl:
$prueba='c:\WINNT\Temp\advertencia.gif';

open my $Imagen, '<', $prueba or die "ERROR: No puedo leer la imagen $prueba: $!\n";
binmode($Imagen);

while ( read($Imagen, $buffer, 1024) ) {
    $img .= $buffer;                       # Leemos la imagen en bloques de 1k
}

close $Imagen;

binmode (STDOUT);
print "Content-type:image/gif\n\n";
print $img;
Mensaje Mar May 22, 2007 1:34 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4091
Ubicación: Valladolid, España
Responder citando

En este hilo tienes un ejemplo concreto:
http://perlenespanol.baboonsoftware.com/foro/about693.html
Mensaje Mar May 22, 2007 2:09 pm
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
imagenes Responder citando

Código:
mysql> SELECT * FROM IMAGENES2;
+----+----------------------------------+
| ID | IMAGEN                           |
+----+----------------------------------+
|  1 | /evaluacion/Images/area_cme1.gif |
|  2 | /evaluacion/Images/borrar.jpg    |
+----+----------------------------------+
2 rows in set (0.00 sec)


Perl:
$db=DBI->connect("dbi:$driver:$BD:$host",$user,$clave);

$query=$db->prepare("select IMAGEN FROM imagenes2 WHERE ID='2'");
$query->execute;
($IMAGEN)=$query->fetchrow_array;
$query->finish;

print <<inicio_HTML;

<html>
<head>
<title>Imagen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<table>
<tr>
<td width="40" height="20" colspan="4" valign="top"><img src="$IMAGEN" width="100"></td>
</tr>
</table>
</body>
</html>

inicio_HTML

$sth->finish();
$db->disconnect();

exit;


Lo hice de esta manera. Muchas gracias.
Mensaje Lun Jun 04, 2007 1:45 pm
patito
Perlero Nuevo
Perlero Nuevo
Registrado: 07 May 2007
Mensajes: 15
imagenes Responder citando

pero ahora que lo tengo asi, y que ya aparece la imagen, como le hago ahora para que tambien pueda imprimir texto, en caso de que el valor en el campo no sea una referencia a una imagen, si no texto, ya que al poner el <img src=$IMAGEN y si la variable contiene texto aparece un cuadro con una cruz roja por que esta esperando una imagen, de que manera puedo alternar entre imprimir imagen o texto?
Mensaje Lun Jun 04, 2007 2:27 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4091
Ubicación: Valladolid, España
Responder citando

En el programa estás haciendo un print muy largo que imprime toda la página HTML.

Lo que puedes hacer es escalonar la salida:
Primero imprimes la cabecera y la primera parte de la página. Segundo, haces un 'if' para saber si lo que tienes que imprimir es imagen o texto. Según sea un caso u otro harás un print distinto: o un print de una marca <img> o de una marca <p> (párrafo), como contenidos de la celda.
Tercero, imprimes el resto de la página (desde el final de celda de tabla hasta el final).
Publicar nuevo tema   Responder al tema    Foros de discusión -> HTML Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group