У меня есть сайт, который в настоящее время использует изображения на файловом сервере. Изображения появляются на странице, где пользователь может перетащить каждого, как необходим. Это сделано с jQuery, и изображения включаются в список. Каждое изображение является довольно стандартным:
<img src='//network_path/image.png' height='80px'>
Теперь однако я должен сослаться на изображения, сохраненные как BLOB в базе данных Oracle (никакой выбор на этом, таким образом, не обсуждение заслуги). У меня нет проблемы при получении BLOB и отображении на своем собственном использовании:
$sql = "SELECT image FROM images WHERE image_id = 123";
$stid = oci_parse($conn, $sql);
oci_execute($stid);
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
$img = $row['IMAGE']->load();
header("Content-type: image/jpeg");
print $img;
Но я должен [эффективно] получить то изображение как src атрибут тега img. Я попробовал imagecreatefromstring (), но это просто возвращает изображение в браузере, игнорируя другой HTML. Я посмотрел на uri данных, но предел размера IE8 исключает это.
Таким образом, теперь я отчасти застреваю. Мои поиски продолжают придумывать использование атрибута src, который загружает другую страницу, которая содержит изображение. Но мне нужно само изображение для фактического показа на странице. (Отметьте: Я говорю что изображение, имея в виду по крайней мере одно изображение, но целых восемь на странице).
Любая справка значительно ценилась бы.
Что ж, вы можете сделать несколько вещей. Вы можете создать страницу, которая будет отображать изображение
<img src="image.php?id=123" />
Эта страница image.php будет иметь это:
$sql = "SELECT image FROM images WHERE image_id = " . (int) $_GET['id'];
$stid = oci_parse($conn, $sql);
oci_execute($stid);
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
if (!$row) {
header('Status: 404 Not Found');
} else {
$img = $row['IMAGE']->load();
header("Content-type: image/jpeg");
print $img;
}
Или вы можете base64 закодировать ее в src (обратите внимание, не все браузеры справляются с этим хорошо):
<img src="data:image/jpeg;base64,<?php echo base64_encode($img); ?>" />
Обычно это можно сделать с помощью поля
.Он будет отображаться на странице не как ссылка. В чем проблема? Вы хотите встроить данные изображения в HTML?
Чтобы сделать его более эффективным, вы можете реализовать некоторый тип кэширования, например, записать данные изображения в файл и сделать заголовок (расположение ...)
, если вы его найдете, вместо того, чтобы снова запрашивать базу данных. Также должны быть установлены заголовки кеширования браузера , чтобы браузер не загружал изображение, если оно было кэшировано локально.
Вы можете попробовать следующее:
$img = $row['IMAGE']->load();
print('<img src="data:image/png;base64,'.base64_encode($img).'" />');
Но мне нужно [эффективно] получить это изображение в качестве атрибута src тега img
Как уже сказал Байрон, приемлемый и правильный способ - вывести blob в независимом изображении. ресурс и встроить его с помощью тега img
. Это единственный хороший способ. Вы можете использовать data:
URI , но они
Практически никогда не бывает хорошим вариантом.