当点击特定的URL时,在浏览器上显示base64编码的图像

时间:2019-01-04 17:46:26

标签: php database image blob

我想显示使用base64_encode编码的图像。该图像是根据通过URL传递的id参数从mysql db获取的。内容类型已设置。说我在index.php文件中有一个代码,而我在浏览器中使用url localhost:8080 / products_images / index.php?id = 1000

header('Content-Type:image/png');
if (isset($_GET['id'])) {
$id = $_GET['id'];
} 

$sql = "SELECT image FROM table WHERE id = ".(int)$id;

$image = $dbInstance->getArray($sql);
unset($sql);
echo '<img src="data:image/png; base64,'.$image[0]['image'].'"/>';

不是在浏览器上显示图像,而是说图像“ localhost:8080 / products_images / index.php?id = 1000”无法显示,因为其中包含错误。

我知道它的发生,因为在浏览器DOM上,我可以清楚地看到图像标签的显示方式如下<img src="localhost:8080/products_images/index.php?id=1000"> 而不是显示编码的字符串给img src标签,而是显示整个URL。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:-3)

要将图像发送到客户端,您可以尝试使用imagecreatefromstring函数从字符串中加载图像,然后使用imagepng函数将图像发送到客户端,它应该为您提供以下信息:

<?php
    $data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
    . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
    . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
    . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';

    $data = base64_decode($data);
    $im = imagecreatefromstring($data);

    if ($im !== false) {

        header('Content-Type: image/png');

        // Send the image
        imagepng($im);

        imagedestroy($im);

    } else {

        echo 'An error occurred.';

    }
?>

我从php doc那里得到了