在php中显示图像

时间:2014-07-01 10:01:47

标签: 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>

5 个答案:

答案 0 :(得分:2)

您的图片存储的格式是什么? 原始字节? BASE-64? 还是一个URL?

如果它是一个网址,那么只需使用属性&#39; src&#39; html img元素。

如果是Base-64则使用

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

如果您有原始字节,请使用PHP将它们转换为Base-64

$base64segment = base64_encode($data);

或者你可以在src属性中调用一个自定义url,它将导致一个PHP脚本,你可以通过发送一个自定义标题后跟字节来从字节中动态创建一个图像:

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

基于Base-64的方法的缺点是数据比原始二进制段占用更多空间,因为编码是使用64个不同的符号而不是256来完成的。

答案 1 :(得分:1)

有了这个:

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

您正在设置图像的来源。这应该是URL或来自服务器根目录的路径。我通常做的是在数据库中保存文件位置和名称(例如&#34; /images/imagename.png")。

如果您在数据库中使用了MIME类型或BLOB,则此代码将无效。

答案 2 :(得分:1)

你试过这个吗?

$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>";

}

答案 3 :(得分:1)

<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>

答案 4 :(得分:0)

您需要将图像MIME type存储在数据库中,然后才能显示如下图像:

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

例如,PNG&#39; MIME typeimage/png;