Отображение изображения в браузере проблема с использованием php - PullRequest
1 голос
/ 05 августа 2020

У меня есть 2 скрипта - imageDisplay. php

<?php
$image = 'images/Banner7.jpg';
// Read image path, convert to base64 encoding
$imageData = base64_encode(file_get_contents($image));
// Format the image SRC:  data:{mime};base64,{data};
$src = 'data:image/jpeg;base64,'.$imageData;

// Echo out a sample image
echo $src;
?>

И index. html скрипт - который я использую для отображения изображения из папки

<img src="showImage.php?images=Banner7.jpg" />

Однако я вижу только значок изображения, как показано ниже

enter image description here

But on checking FireFox - Network Response, I can see the full image as it ought to be and right clicking on the image icon above, view image I can still see the proper image as shown below:

введите описание изображения здесь

У меня их несколько, и я хотел бы отобразить их как base64, а затем распечатать в формате pdf.

Моя проблема :

посмотрите на приведенный выше код и помогите мне правильно отобразить изображение в браузере. Заранее спасибо.

1 Ответ

1 голос
/ 05 августа 2020

Возвращая тег <img>, вы в основном дублируете тег <img> в атрибут src тега <img>, который фактически выглядит так:

<img src="<img src="data:image/jpeg;base64">">

В вашем сценарии showImage нет причин кодировать что-либо в base64, это нужно только тогда, когда вы используете текстовый транспорт, например HTML. Поскольку вы передаете через HTTP, который поддерживает двоичный код, вы можете просто отправить файл. Есть несколько способов, но самый простой:

echo file_get_contents($image);
exit;

Другой вариант, который немного более эффективен для больших файлов:

readfile($image);
exit;

Если вы хотите получить немного более интересный , вы также можете вывести MIME для файла:

header('Content-Type: ' . mime_content_type($image));
readfile($image);
exit;

edit

Я также должен указать, что передача имен файлов в качестве параметров без очистки и проверки является большой проблема безопасности, которая может привести к проблемам с обходом пути . Как минимум, я бы назвал basename() по предоставленному параметру, но вам, вероятно, следует посмотреть в свои настройки c, чтобы увидеть, что может или не может go неправильно.

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