Блоб Oracle как img src на странице PHP

У меня есть сайт, который в настоящее время использует изображения на файловом сервере. Изображения появляются на странице, где пользователь может перетащить каждого, как необходим. Это сделано с 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, который загружает другую страницу, которая содержит изображение. Но мне нужно само изображение для фактического показа на странице. (Отметьте: Я говорю что изображение, имея в виду по крайней мере одно изображение, но целых восемь на странице).

Любая справка значительно ценилась бы.

5
задан menkes 16 June 2010 в 18:55
поделиться

4 ответа

Что ж, вы можете сделать несколько вещей. Вы можете создать страницу, которая будет отображать изображение

<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); ?>" />
7
ответ дан 18 December 2019 в 11:53
поделиться

Обычно это можно сделать с помощью поля .Он будет отображаться на странице не как ссылка. В чем проблема? Вы хотите встроить данные изображения в HTML?

Чтобы сделать его более эффективным, вы можете реализовать некоторый тип кэширования, например, записать данные изображения в файл и сделать заголовок (расположение ...) , если вы его найдете, вместо того, чтобы снова запрашивать базу данных. Также должны быть установлены заголовки кеширования браузера , чтобы браузер не загружал изображение, если оно было кэшировано локально.

3
ответ дан 18 December 2019 в 11:53
поделиться

Вы можете попробовать следующее:

$img = $row['IMAGE']->load();
print('<img src="data:image/png;base64,'.base64_encode($img).'" />');
1
ответ дан 18 December 2019 в 11:53
поделиться

Но мне нужно [эффективно] получить это изображение в качестве атрибута src тега img

Как уже сказал Байрон, приемлемый и правильный способ - вывести blob в независимом изображении. ресурс и встроить его с помощью тега img . Это единственный хороший способ. Вы можете использовать data: URI , но они

  1. увеличивают ваш HTML-код
  2. не работают в IE <8 и ограничены 32 КБ в IE 8 ,
  3. увеличивают объем данных на 33%, и
  4. лишают браузер возможности кэшировать ресурс изображения.

Практически никогда не бывает хорошим вариантом.

4
ответ дан 18 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: