Intereting Posts
Symfony: создание поля формы datetime действительно для чтения PHP Как связать Soap XML с XML-схемой (.xsd) Как я могу прикрепить изображение с помощью Phpmailer? Я пытаюсь, чтобы страница «Подробности» ссылалась на две отдельные части моего сервера, которые связаны через techID Стиль в xampp отличается от файлов на моем рабочем столе? PHP – Файл конфигурации приложения, хранящийся как – ini, php, sql, cached, php class, JSON, php array? PHP GD: Как получить imagedata как двоичную строку? Ошибка при отправке электронной почты с помощью phpmailer – Ошибка при передаче SMTP-сообщений: данные не принимаются Поведение array_diff_uassoc непонятно Как найти последний день месяца с даты? всплывающее окно на основе входного значения php Не удается отправить заголовки; заголовки, уже отправленные в /home/zk/public_html/lib/Zend/Cache/Backend/File.php, строка 1 Удалить инструкцию по построению запроса Doctrine PHP Fire and Forget Запрос POST array_map для коллекции с интерфейсами массива?

Как получить BMP-изображение из двоичных данных blob с помощью php

Я пытаюсь в течение 2 дней найти способ получить некоторые изображения из базы данных. Они сохраняются как двоичная строка (я читал термин где-то, но, откровенно говоря, никогда не слышал).

Большинство изображений находятся в формате .jpeg и их легко получить и сохранить в файл. но моя проблема – изображения .bmp . По какой-то причине я не могу показать это.

На данный момент я использую простой код, чтобы получить изображение и сохранить его в файле:

 $img = $row['image']; file_put_contents("file.jpeg", $img); //Doesn't matter what format i put there. 

.jpeg работает в .jpeg и .png , но форматы .bmp не читаются, когда я пытаюсь отобразить.

Вещи, которые я уже нашел и не решили:

  • http://www.webhostingtalk.com/showthread.php?t=718919

  • http://www.programmierer-forum.de/function-imagecreatefrombmp-laeuft-mit-allen-bitraten-t143137.htm

Причина. Оба пытаются конвертировать изображение, но некоторые части отсутствуют, черные.

Кстати, я не уверен, что это повлияет на вопрос, но в моем проекте я использую эту библиотеку https://github.com/Intervention/image , и только с этим я вижу «полуконверсию» изображений. С file_put_contents() он все еще не читается. Итак, мой фактический код выглядит так:

 $img = Image::make(imagecreatefrombmpstring($item['image'])); $filename = __DIR__ . '/test.jpeg'; $img->save($filename); 

РЕДАКТИРОВАТЬ:

Я использовал перед этим решением ниже, чтобы проверить, есть ли у меня изображения .bmp :

PHP: данные двоичного изображения, проверка типа изображения

И они. Я мог бы легко адаптировать это и исправить свой выходной файл, но это не моя настоящая проблема. Моя проблема в том, что файлы .bmp по какой-то причине не отображаются.

Проблема заключается в BLOB который ограничен 65535 байтами.

Растровые изображения составляют примерно 4-8x размер сжатого изображения и, скорее всего, потребуется больше места для размещения в базе данных.

Я предлагаю изменить колонку на LONGBLOB или по крайней мере MEDIUMBLOB .

Вам также не нужна библиотека из github, если изображение полностью сохранено, вы можете использовать file_put_contents() (который является двоичным безопасным, да!) Так же, как с png или jpeg.