Есть картинка в виде бинарных данных взятых из базы (тип поля image), как из них получить картинку и вывести в верстку?
Простых вариантов вижу два:
Вариант 1: Подготовить отдельный скрипт image.php, которому в URL передавать идентификатор изображения, например ID или имя файла. В таком случае код HTML будет выглядеть так:
<img src="/path/image.php?id=1234" />
или например
<img src="/path/images/1234/Name_Of_Image_In_Human_Readable_Format.png" />
если вы используете ЧПУ в каком-то виде
При загрузке страницы браузер обнаружит такую ссылку и обратится к ней, ожидая в ответе увидеть изображения. Задача скрипта - по принятому идентификатору найти изображение в БД и вывести его обычным print. ВНе забываем еще поменять Content-Type, например вот так: https://stackoverflow.com/a/2634072, чтобы браузер понял, что именно он прочитал
Выводить данные из БД в поток вывода очень просто. Насколько я понял, в БД они у вас хранятся в бинарном виде, соответственно их нужно получить из БД. PHP хранит бинарные данные в виде бинарных же строк. Выводить их нужно через fwrite http://php.net/manual/en/function.fwrite.php
$binary_string = (...); // Тут каким-то образом извлекается строка, замените на свой код
fwrite(STDOUT, $binary_string); // Пишем в стандартный поток вывода, открывать его не нужно
// Закрывать стандартный поток вывода тоже не нужно
STDOUT в данном случае это стандартный поток вывода: http://php.net/manual/ru/features.commandline.io-streams.php
Этот вариант также интересен тем, что можно подсчитать статистику обращений к изображению, модифицировать изображение на лету (наложить watermark, например), а также можно учесть права пользователей на просмотр изображения, и для пользователя без доступа выдавать другое изображение или заглушку
Вариант 2: Использовать Base64 URI:
$file = "icon.gif";
if($fp = fopen($file,"rb", 0))
{
$picture = fread($fp,filesize($file));
fclose($fp);
// base64 encode the binary data, then break it
// into chunks according to RFC 2045 semantics
$base64 = chunk_split(base64_encode($picture));
$tag = '<img ' . "n" .
'src="data:image/gif;base64,' . $base64 .
'" />';
echo $tag;
}
В итоге получится что-то вроде такого:
<img
src="data:image/gif;base64,R0lGODlhUAAPAKIAAAsLav///88PD9WqsYmApmZmZtZfYmdakyH5BAQUAP8ALAAAAABQAA8AAAPb
WLrc/jDKSVe4OOvNu/9gqARDSRBHegyGMahqO4R0bQcjIQ8E4BMCQc930JluyGRmdAAcdiigMLVr
ApTYWy5FKM1IQe+Mp+L4rphz+qIOBAUYeCY4p2tGrJZeH9y79mZsawFoaIRxF3JyiYxuHiMGb5KT
kpFvZj4ZbYeCiXaOiKBwnxh4fnt9e3ktgZyHhrChinONs3cFAShFF2JhvCZlG5uchYNun5eedRxM
AF15XEFRXgZWWdciuM8GCmdSQ84lLQfY5R14wDB5Lyon4ubwS7jx9NcV9/j5+g4JADs=
" />
Этот вариант не прокатит с браузерами старше IE 8, будьте внимательны. Также есть отрицательные эффекты размера HTML, если у вас галерея на 20+МБ будет выдаваться таким образом в виде одного огромного HTML-файла, будут проблемы с просмотром на слабом соединении и перерасход памяти браузера. Также могут быть отрицательные эффекты кеширования - такие изображения не могут быть кешированы бразуером, тогда как изображения, полученный через URL src в Варианте 1 будут кешироваться без проблем
Подробнее: http://www.skillz.ru/dev/php/article-Base64_img_v_HTML.html
Я бы советовал пойти вам первым вариантом, он более каноничен и гибок, и также содержит минимум отрицательных эффектов
В случае простых изображений вам нужно указать mime-тип для них (например, image/gif), за ним идет base64-представление бинарного файла с изображением. Ниже приведен пример (переводы строк добавлены, чтобы не разрывать страницу, на самом деле, их нет):
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0j
vb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAA
Re8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0Cc
guWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" width="16"
height="14" alt="внедренная иконка папки"/>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть функция f(), не принимающая параметров и содержащая другие функции f1, f2, f3, f4, expectДругие функции (f1, f2, f3, f4, expect) описаны в подключаемом файле
Нужно сделать так, чтобы при получении данных из формы мы писали в базу все полученные данные, кроме одногоНапример, у нас есть в форме 3 поля:...
при вводе числа AA в 16и ричнной системе выдаёт не 170 а 160