Как читать изображения из базы данных MySQL с помощью PHP?
Если изображения хранятся в BLOB в базе данных, как использовать полученные двоичные данные и превращать их в изображение с помощью src
в <img>
или используя background-image
свойства CSS?
Благодарю.
Чтобы напрямую использовать двоичные данные в качестве источника изображения, вы можете использовать схему URI данных , например:
$uri = 'data:image/png;base64,'.base64_encode($row['binary-data']);
Этот URI затем можно использовать непосредственно в качестве источника изображения:
background-image: url(<?php echo $uri; ?>) <img src="<?php echo $uri; ?>">
Но это имеет некоторые существенные недостатки: помимо отсутствия поддержки этих URI данных в старых браузерах, URI данных также имеют неблагоприятные условия в отношении полезной нагрузки, кэширования и ссылок .
То, что вы, вероятно, должны делать, если хранить изображения в виде BLOB, предоставляет URL-адрес, который вызывает ваш скрипт таким образом, чтобы он мог определить, какое изображение будет возвращено.
Используйте этот URL как src
, или background-image: url(...)
и в скрипте, прочитайте BLOB из базы данных в переменную.
Затем выведите переменную после соответствующей информации заголовка, указав браузеру на получение изображения, например:
header('Content-Type: image/jpeg');
Отправка заголовка Content-Length
и разумная информация о кешировании / истечении срока действия также были бы разумными.
NB. Сказав все это, я склонен опасаться использования BLOB в базах данных, они, как правило, наносят ущерб производительности. Когда я хочу хранить изображения, я сохраняю их в некоторой структуре каталогов и каким-то образом ссылаюсь на них в базе данных.