Отображение изображения в php

#php #mysql

#php #mysql

Вопрос:

В настоящее время я пытаюсь отобразить изображение из созданной мной базы данных, используя phpmyadmin для тестирования моего скрипта. База данных содержит изображения в формате png и jpg. Но на выходе получаются просто бессмысленные символы, потому что браузер не может отобразить изображение. Может кто-нибудь сказать мне, где я ошибаюсь?

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

это мой скрипт:

 <html>
<head></head>
<body>

<?php
$con = mysqli_connect("localhost", "Dave", "password");
if (!$con){
    die ("Could not connect to database: " . mysqli_connect_error());
}

mysqli_select_db($con, "snippet");

$res = mysqli_query($con, "select * from image");

echo "<table>";
while ($row = mysqli_fetch_array($res)){
    echo "<tr>";
    echo "<td>"; ?> <img src="<?php echo $row["image"]; ?>" height="100" width="100"> <?php echo "</td>";
    echo "<td>"; echo $row["image_name"]; echo "</td>";
    echo "</tr>";
}
echo "</table>";
?>

</body>
</html>
  

Комментарии:

1. что содержит $row[«image»] …? URL или что-то еще …?

2. Проверьте свою структуру папок.. Я думаю, что ваш код получает имя изображения только из базы данных. Вы должны добавить имя папки с вашим изображением. Например: Путь к изображению: /images/123.jpg тогда вы должны написать свой код следующим образом <img src=»<?php echo ‘images/’.$row[«image»]; ?>» height=»100″ width =»100″>

3. не храните изображения в базе данных. это безумие. если вы боитесь сложности загрузки изображений, это довольно просто с php_exif и libgd установлено. проверьте github.com/bivoc/bulletproof для класса, который будет выполнять достаточно безопасную загрузку изображений всего несколькими строками кода.

4. Это не безумие. Это просто менее распространено / популярно, чем альтернатива.

5. @Orion: да ванг ань 🙂

Ответ №1:

В каком формате хранится ваше изображение? Необработанные байты? База-64? или URL?

Если это URL, то просто используйте атрибут ‘src’ элемента html img.

Если это Base-64, тогда используйте

 <img src="data:image/jpg;base64,THE BASE 64 code here" />
  

Если у вас есть необработанные байты, либо преобразуйте их в Base-64 с помощью PHP

 $base64segment = base64_encode($data);
  

или вы можете вызвать пользовательский URL-адрес в атрибуте src, который приведет к PHP-скрипту, где вы можете создать изображение на лету из байтов, отправив пользовательский заголовок, за которым следуют байты:

 <?php
header('Content-type: image/jpeg');
header('Content-Length: '.strlen($data));
echo $data;
?>
  

Недостатком подхода, основанного на базе 64, является то, что данные занимают больше места, чем исходный двоичный сегмент, потому что кодирование выполняется с использованием 64 различных знаков вместо 256.

Ответ №2:

С помощью этого:

  <img src="<?php echo $row["image"]; ?>
  

Вы устанавливаете источник изображения. Это должен быть либо URL, либо путь от вашего корневого сервера. Обычно я сохранял местоположение и имя файла (например, «/images/imagename.png») в базе данных.

Если вы использовали MIME-тип или BLOB-объект в базе данных, этот код не будет работать.

Ответ №3:

Вы пробовали это?

 $base64 = 'data:image/PNG;base64,' . base64_encode($row['image']);
 echo "<img src=$base64 />" ;
  

В вашем коде…

 while ($row = mysqli_fetch_array($res)){
echo "<tr>";
echo "<td>"; ?> <img src="<?php echo data:image/PNG;base64,'. base64_encode($row["image"]); ?>" height="100" width="100"> <?php echo "</td>";
echo "<td>"; echo $row["image_name"]; echo "</td>";
echo "</tr>";
  

}

Ответ №4:

 <html>
<head></head>
<body>

<?php
$con = mysqli_connect("localhost", "Dave", "password");
if (!$con){
    die ("Could not connect to database: " . mysqli_connect_error());
}

mysqli_select_db($con, "snippet");

$res = mysqli_query($con, "select * from image");

echo "<table>";
while ($row = mysqli_fetch_array($res)){
$row["image"] = "data:image/png;base64,".base64_encode($row["image"]); //the trick!
    echo "<tr>";
    echo "<td>"; ?> <img src="<?php echo $row["image"]; ?>" height="100" width="100"> <?php echo "</td>";
    echo "<td>"; echo $row["image_name"]; echo "</td>";
    echo "</tr>";
}
echo "</table>";
?>

</body>
</html>
  

Комментарии:

1. Вы отвечаете нормально, но вместо того, чтобы публиковать весь код, просто попробуйте исправить ошибку, которая есть у спрашивающего.

Ответ №5:

Вам нужно сохранить изображение MIME type в базе данных, тогда вы можете отобразить изображение следующим образом:

 echo $row["image"];
header("Content-Type: ".$row['mime_type']);
  

Например, PNG ‘s MIME type является image/png ;