Intereting Posts
Вставьте текстовое поле или флажок при щелчке мышью в текущей позиции мыши или перетащите его Динамически загружать информацию в Twitter Laravel не может десериализовать модель с помощью столбца POINT mysql Перенаправление в поддомен из другого домена без изменения его URL-адреса mysqlexception был необработанным – уже открыт DataReader, связанный с этим соединением, который должен быть закрыт первым Как предоставить справочную информацию в формате pdf от dompdf? Плагин WordPress – вызов неопределенной функции finfo_open () PHP – очень простой XMLReader Запретить Wappalyzer определять структуру PHP Имена API JIRA API содержат целые пути опубликованных файлов Удаленный вход Amazon (KDP) Не предоставлять доступ к определенному методу в контроллере, если сеанс не установлен в кодеигниторе .htaccess 403 Запрещено, если url содержит каталог с другим файлом htaccess Безопасные возможности загрузки изображений пользователей в PHP Как отсортировать функцию query_posts по настраиваемому полю, а ограничивать сообщения другим настраиваемым полем

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

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

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

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

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

Обратите внимание, что echo <img> – это всего лишь трюк, который я использую для отображения нескольких изображений из одного и того же сценария php при переходе через ресурс результатов 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()) . '" />'; 

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

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

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

  • Учебное пособие по хранению изображений в поле Mysql BLOB

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

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