2011-05-24 109 views
10

¿Es esto posible con php y una base de datos mysql para convertir un blob en un archivo de imagen?Php: Convertir un blob en un archivo de imagen

+1

Por favor, agrega más información. ¿Qué contiene el campo BLOB? ¿Que planeas hacer? –

+1

si se trata de una imagen almacenada como BLOB, sí. –

+0

¿Intentó configurar el encabezado y luego leer este blob? – k102

Respuesta

4

Si el BLOB contiene los datos binarios de una imagen (en un formato reconocible como, por ejemplo, tiff, png, jpeg, etc.), toma el contenido del BLOB, escríbelo en un archivo y voilà ... tienes una imagen.

En algunos sistemas de operación extraños, debe dar al archivo de salida una extensión correspondiente para que el archivo de imagen pueda reconocerse como tal.

1

Si va a guardar imágenes en campo de tabla Blob MySQL y desea conseguir estas imágenes, entonces este artículo es útil para usted:

vistazo a la siguiente parte del artículo anterior:

<?php 
if(isset($_REQUEST['id'])) 
{ 
    // get the file with the id from database 
     include “dbconfig.php”; 
     $dbconn = mysql_connect($dbhost, $dbusr, $dbpass) or die(”Error Occurred-”.mysql_error()); 
     mysql_select_db($dbname, $dbconn) or die(”Unable to select database”); 

     $id = $_ REQUEST ['id']; 
     $query = “SELECT `img_name`, `img_type`, `img_size`, `img_data` 
         FROM img_tbl WHERE id = ‘$id’”; 

     $result = mysql_query($query) or die(mysql_error()); 
     list($name, $type, $size, $content) = mysql_fetch_array($result); 

     header(”Content-length: $size”); 
     header(”Content-type: $type”); 
     print $content; 

     mysql_close($dbconn); 
} 
?> 
+2

. Para cualquier persona que copie/pegue de este ejemplo, tenga en cuenta que usa mal comillas – kurdtpage

8

Puede utilizar algunos métodos diferentes según la biblioteca de imágenes php que tenga instalada. Aquí hay algunos ejemplos.

Nota, el eco <img> es solo un truco que utilizo para mostrar varias imágenes desde el mismo script php al pasar por un recurso de resultados MySQL. También podría salir a través de la cabecera() como se había mostrado @NAVEED.

GD:

$image = imagecreatefromstring($blob); 

ob_start(); //You could also just output the $image via header() and bypass this buffer capture. 
imagejpeg($image, null, 80); 
$data = ob_get_contents(); 
ob_end_clean(); 
echo '<img src="data:image/jpg;base64,' . base64_encode($data) . '" />'; 

ImageMagick (imagick):

$image = new Imagick(); 
$image->readimageblob($blob); 
echo '<img src="data:image/png;base64,' . base64_encode($image->getimageblob()) . '" />'; 

GraphicsMagick (Gmagick):

$image = new Gmagick(); 
$image->readimageblob($blob); 
echo '<img src="data:image/png;base64,' . base64_encode($image->getimageblob()) . '" />'; 
3

En mi caso, tuve que usar base64_decode para convertir las imágenes blob correctamente en el archivo.

$path = "/tmp/images"; 
$sql = "SELECT image_name, image_content FROM images"; 

$result = mysql_query($sql, $db_con); 
if (!$result) { 
    $message = 'Invalid query: ' . mysql_error() . "\n"; 
    $message .= 'Whole query: ' . $sql; 
    die($message); 
} 

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $image = $row["image_contents"]; 
    $name = $row["image_name"]; 

    // option 1 
    $file = fopen($path."/".$name,"w"); 
    echo "File name: ".$path."$name\n"; 
    fwrite($file, base64_decode($image)); 
    fclose($file); 

    // option 2 (oneliner) 
    // file_put_contents($path."/".$name, base64_decode($image)); 
} 
Cuestiones relacionadas