PHP:从MySQL Blob直接将图像检索到<img/>标签中

时间:2011-11-27 22:02:58

标签: php mysql image blob

我已将我的图像存储到(中)BLOB字段中,并希望检索嵌入在PHP生成的网页中的图像。

当我使用

测试检索存储的图像时
header('Content-type: ' . $image['mime_type']);
echo $image['file_data'];

一切看起来都很好。

但是,我还没有找到一种方法将图像干净地检索到文档的中间。例如,使用

$image  = $row['file_data'];
echo '<img src="data:image/jpeg;base64,'.$image['file_data'].'" alt="photo"><br>';

...或...

$im = imageCreateFromString($image);

我只是在屏幕上看到一堆十六进制垃圾。

我使用以下方式直接存储了图像:

ob_start();
imagejpeg($resizedImage, null, 100);
$content = ob_get_contents();
ob_end_clean();
$sql = sprintf(
 "insert into images (filename, mime_type, file_size, file_data, event_id)
 values ('%s', '%s', %d, '%s',%d)",
 mysql_real_escape_string($fileName),
 mysql_real_escape_string($mimeType),
 $imageSize,
 mysql_real_escape_string($content),
 $eventID 
);
$result = $cn->query($sql);

有没有人请有一个有效的代码片段来成功显示PHP输出中存储的.jpg mid文件?

3 个答案:

答案 0 :(得分:6)

echo '<img src="data:image/jpeg;base64,'.base64_encode($image['file_data']).'" alt="photo"><br>';

但请记住,旧的IE版本不支持这种内嵌图像!除此之外,浏览器不能缓存这样的图像,除了它包含的HTML页面。

答案 1 :(得分:4)

您应该创建某种“图像服务器”。你已经接近了。 例如,创建类似image.php的东西,它将获得图像名称并将动态生成它。 所以,例如,假设您想获得somePic.jpg图像。你可以通过:

image.php?NAME = somePic.jpg

<?php
header('Content-type: ' . $image['mime_type']);
echo $image['file_data'];
?>

您的标签:

<img src='image.php?name=somePic.jpg' />

或者更一般:

echo "<img src='image.php?name={$image['filename']}' />"

答案 2 :(得分:1)

为什么不调用您的测试页image.php,然后在渲染页面上从浏览器调用它:

<img src="image.php?imageid=123" alt="photo" />