Basándonos el artículo anterior de como guardar una imagen y su miniatura a un campo BLOB de mysql, ahora veremos como poder recuperar y mostrar esas imágenes.

Para que el script se muestre como una imagen necesitamos usar la cabecera Content-type y poner el tipo MIME de la imagen que recuperaremos de la tabla, esto es:

header("Content-type: image/gif");

Donde image/gif es el el tipo MIME para una imagen GIF.

Desarrollo del Script

Las imágenes han sido guardadas en la tabla y tienen un único identificador representado por el campo idfoto, la imagen original se guarda en el campo foto, la miniatura en el campo thumb y el tipo MIME en el campo mime, como podemos ver en la estructura de la tabla:

CREATE TABLE `tabla` (
  `idfoto` int(3) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(255) NOT NULL DEFAULT '',
  `foto` blob NOT NULL,
  `thumb` blob NOT NULL,
  `mime` varchar(40) NOT NULL DEFAULT '',
  PRIMARY KEY  (`idfoto`)
) ;

Necesitamos enviar parámetros al script para indicarle el id de la imagen que queremos ver, y también si queremos ver la imagen original o su miniatura, suponiendo que el archivo que contiene al script se llame verblob.php:

<img src="verblob.php?idfoto=1&tam=1" alt="Imagen desde Blob" />

Donde el parámetro idfoto indica el id de la imagen, y el parametro tam indica si va a mostrar la imagen original o la miniatura (1 para mostrar la imagen original y 2 para mostrar la miniatura). El script trabaja de la siguiente manera:

// Parámetros para recuperar la imagen
# Recuperamos el parámetro GET con el id único de la foto que queremos mostrar
$idfoto = (isset($_GET["idfoto"])) ? $_GET["idfoto"] : exit();
# Recuperamos el parámetro GET para elegir entre la miniatura o la foto real
$tam = (isset($_GET["tam"])) ? $_GET["tam"] : 1;
// Escojemos la foto real o la miniatura según la variable $tam
switch($tam) {
	case "1":
		$campo = "foto";break;;
	case "2":
		$campo = "thumb";break;;
	default:
		$campo = "foto";break;;
}

Ya sabiendo el id de la imagen que vamos a mostrar, hacemos la consulta a la base de datos:

// Recuperamos la foto de la tabla
$sql = "SELECT $campo, mime
		FROM tabla 
		WHERE idfoto = $idfoto";
# Conexión a la base de datos
$link = mysql_connect(DBHOST, DBUSER, DBPASSWORD) or die(mysql_error($link));;
mysql_select_db(DBNAME, $link) or die(mysql_error($link));
$conn = mysql_query($sql, $link) or die(mysql_error($link));
$datos = mysql_fetch_array($conn);
// La imagen
$imagen = $datos[0];
// El mime type de la imagen
$mime = $datos[1];
// Gracias a esta cabecera, podemos ver la imagen 
// que acabamos de recuperar del campo blob
header("Content-Type: $mime");
// Muestra la imagen
echo $imagen;	

Conclusiones

Los campos blob no solo nos permiten guardar imágenes, sino una gran variedad de datos, para mostrarlos solo hay que tener en cuenta el tipo MIME del archivo que hemos guardado, y al momento de recuperarlo sólamente utilizamos header con el Content-Type.

Elementos Utilizados

Referencias

Autor

Braulio Andrés Soncco Pimentel
Programador - Diseñador
braulio at buayacorp.com