如何使用PHP从MySQL数据库中读取图像?
如果图像存储在数据库中的BLOB中,如何使用我获得的二进制数据并使用src
将其转换为图像
<img>
或使用CSS属性background-image
?
感谢。
答案 0 :(得分:3)
要直接将二进制数据用作图像源,您可以使用data URI scheme,例如:
$uri = 'data:image/png;base64,'.base64_encode($row['binary-data']);
然后可以直接将此URI用作图像的源:
background-image: url(<?php echo $uri; ?>)
<img src="<?php echo $uri; ?>">
但这有一些实质性的缺点:除了旧版浏览器中缺少对这些数据 URI的支持外,data URIs do also have disadvantaged regarding payload, caching, and references。
答案 1 :(得分:1)
如果将图像存储为BLOB,您可能应该做的是提供一个URL,以一种可以确定要返回的图像的方式调用脚本。
将该URL用作src
或background-image: url(...)
,并在脚本中,将数据库中的BLOB读取到变量中。
然后在适当的标题信息之后输出变量,告诉浏览器它将接收图像,例如:
header('Content-Type: image/jpeg');
发送Content-Length
标题以及有关缓存/到期的明智信息也是明智之举。
NB。说了这么多,我倾向于警惕在数据库中使用BLOB,它们往往会削弱性能。当我想存储图像时,我会存储在一些目录结构中,并以某种方式在数据库中引用它们。