Отображение BLOB-объекта в виде изображения в php без заголовка («Content-type: image / jpg»); - PullRequest
0 голосов
/ 26 февраля 2010

Я извлекаю двоичные данные из моей базы данных mySql и хочу отобразить их в виде изображения.

Я не хочу создавать отдельную страницу для отображения изображения (помимо прочего, это потребует дополнительного вызова данных)

Я просто хочу быть в состоянии сделать

В значительной степени, но переменная $ Image имеет формат longblob, и мне нужно ее преобразовать.

Спасибо заранее.

Ответы [ 5 ]

4 голосов
/ 26 февраля 2010

Я знаю, что это не конкретный ответ на ваш вопрос, но учтите, что, удалив этот вызов базы данных, вы резко увеличите нагрузку на сервер, увеличите размер каждой страницы и замедлите скорость отклика вашего сайта.

Рассмотрим любой переполнение стека страниц. Большинство из них динамические, поэтому страница не может быть кэширована. но миниатюра пользователя является статической и может быть кэширована.

Если вы отправляете миниатюру в виде URI данных, вы выполняете поиск в БД и передачу данных для каждой миниатюры на каждой странице.

Если вы отправляете его как связанное изображение, вы выполняете поиск в одной БД при первой загрузке изображения, и с этого момента оно будет кэшироваться (если вы отправите с ним правильные заголовки HTTP), заставляя сервер загружаться легче, и ваш сайт работает быстрее!

3 голосов
/ 26 февраля 2010

Я не хочу делать отдельную страницу для отображения изображения

Вы можете кодировать base64 данные своего изображения и включать их непосредственно в разметку как URI данных . В большинстве случаев это не очень хорошая идея:

  • Это не поддерживается IE <8 </li>
  • Это (очевидно) масштабирует HTML страницу.
  • Это замедляет рендеринг, потому что браузер должен сначала загрузить ресурс, прежде чем он сможет завершить рендеринг HTML

Лучше создать отдельный сценарий и выполнить этот дополнительный вызов.

2 голосов
/ 26 февраля 2010

Вы, вероятно, могли бы сделать это, используя URI в кодировке Base64.

Я не уверен, возможно ли сделать это прямо в img-тэге, но вы можете сделать это, установив фоновое изображение для div.

В основном вы меняете обычный

.smurfette {
    background: url(smurfette.png);
}

до

.smurfette {
    background: url(data:image/png;base64,iVBORw0KGgo [...] P6VAAAAAElFTkSuQmCC);
}

URI данных поддерживаются в:

* Firefox 2+
* Safari – all versions
* Google Chrome – all versions
* Opera 7.2+
* Internet Explorer 8+

Информация позаимствована у Роберта Наймана: http://robertnyman.com/2010/01/15/how-to-reduce-the-number-of-http-requests/

0 голосов
/ 26 февраля 2010

$ _ GET результат в отдельную переменную, т.е. $ myvar = $ _GET ['Id']; перед обработкой строки $ imageResult, например ::1001*

$ myid = $ _GET ['Id'];

$ ImageResult = "выбрать игрока. Изображение от игрока, где Id = '$ myid'";

0 голосов
/ 26 февраля 2010

спасибо за ответы, я решил пойти с отдельной страницей GetImage.php, но теперь, похоже, не могу выполнить простейшую из задач

$ImageResult = "select player.Image from player where Id = " . $_GET['Id']; 

    $result = mysql_query($ImageResult) or die ("data recovery failed -3");

    header("Content-type: image/jpeg");
    echo mysql_result($result, 0);

Но это возвращает просто неработающую ссылку и не может понять, что я пропустил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...