web-dev-qa-db-fra.com

Php: convertir un blob en fichier image

Est-ce possible avec php et une base de données mysql pour convertir un blob en fichier image?

11
josh

Si le BLOB contient les données binaires d'une image (dans un format reconnaissable comme par exemple tiff, png, jpeg, etc.), prenez le contenu du BLOB, écrivez-le dans un fichier, et voilà ... vous avez une image.

Sur certains systèmes d'exploitation étranges, vous devez donner au fichier de sortie une extension correspondante, afin que le fichier image puisse être reconnu comme tel.

5
Hyperboreus

Vous pouvez utiliser plusieurs méthodes différentes selon la bibliothèque d'images php que vous avez installée. Voici quelques exemples.

Remarque, l'écho <img> est juste une astuce que j'utilise pour afficher plusieurs images du même script php lors de la boucle à travers une ressource de résultat MySQL. Vous pouvez tout aussi bien sortir via header () que @NAVEED l'a montré.

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())  . '" />';
8
Robert Cesaric

Dans mon cas, j'ai dû utiliser base64_decode pour convertir correctement les images de blob en fichier.

$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));
}
3
bonyiii

Si vous stockez des images dans le champ Blob de la table MySql et que vous souhaitez obtenir ces images, cet article vous est utile:

Regardez la partie suivante de l'article ci-dessus:

<?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);
}
?>
1
Naveed