通过 PHP 显示数据库中的 Base64 图像

php
2022-08-30 16:25:21

我有这个数据库,其中包含图像作为字符串。这些字符串如下所示:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD...

我需要创建一个将显示此图像的链接。“喜欢”是一个图像。所有图像均为jpeg格式。以下是我尝试过但不起作用的内容:something.com/?id=27

<?php
  $host = "smth";
  $user = "smth";
  $pass = "smth";
  $db_name = "smth";
  $dbh = new PDO("mysql:host=$host;dbname=$db_name", $user, $pass);
  $dbh->exec("SET NAMES utf8");
  $q = $dbh->prepare("select content from img where id = :id");
  $q->execute(array(':id'=>$_GET['id']));
  $row = $q->fetch(PDO::FETCH_BOTH);
  header("Content-type: image/jpeg");
  echo $row['content'];
?>

数据已正确提取,但未显示图像。

我需要能够像这样使用此链接,并且我不想要此解决方案:<img src="mysite.com?id=21" /><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABA..." />

谢谢!


答案 1

您的问题的解决方案如下:

如何将 base64 字符串 (gif) 解码为 PHP / HTML 中的图像

引用该来源,但修改:

如果您去掉了第一个情况并选择解码字符串,则应在回显解码的图像数据之前添加以下内容:

header("Content-type: image/gif");
$data = "/9j/4AAQSkZJRgABAQEAYABgAAD........";
echo base64_decode($data);

在第二种情况下,请改用以下内容:

echo '<img src="data:image/gif;base64,' . $data . '" />';

第二种情况很糟糕,因为如果相同的图像显示在多个页面上,浏览器不会执行缓存。


答案 2

使用这个:

$code_base64 = $row['content'];
$code_base64 = str_replace('data:image/jpeg;base64,','',$code_base64);
$code_binary = base64_decode($code_base64);
$image= imagecreatefromstring($code_binary);
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

推荐