Я пытаюсь в течение 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.