Php: преобразовать blob в файл изображения

Возможно ли это с помощью php и базы данных mysql для преобразования блоба в файл изображения?

Ответ 1

Если BLOB содержит двоичные данные изображения (в распознаваемом формате, например, tiff, png, jpeg и т.д.), возьмите содержимое BLOB, напишите его в файл и voilà... у вас есть изображение.

В некоторых странных операционных системах вы должны предоставить выходному файлу соответствующее расширение, чтобы файл изображения можно было распознать как таковой.

Ответ 2

Вы можете использовать несколько разных методов в зависимости от того, какую библиотеку php-изображений вы установили. Вот несколько примеров.

Обратите внимание, что echo <img> это просто трюк, который я использую для отображения нескольких изображений с одного и того же php script при переходе через ресурс результатов MySQL. Вы также можете выводить через header(), как показала @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

В моем случае мне пришлось использовать base64_decode для правильного преобразования изображений с блобом в файл.

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

Ответ 4

Если вы храните изображения в поле Blob таблицы MySql и хотите получить эти изображения, тогда эта статья полезна для вас:

Посмотрите на следующую часть статьи выше:

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