如何用PHP将PostgreSQL中图片字节数组转为data URI格式渲染显示
PostgreSQL存储字节数组图片转Data URI渲染失败解决方案
- PostgreSQL bytea字段转义处理
PostgreSQL查询返回的bytea类型数据默认是带转义格式的十六进制字符串(通常以\x前缀开头),并非原始二进制内容,直接编码会导致base64结果错误。需要先用pg_unescape_bytea()函数将其转换为原始二进制数据再编码。 - Data URI语法错误修正
原代码中data:image/jpeg;base64,后面多了一个多余空格,会导致浏览器无法正确识别base64编码内容,需要删除该空格。 - MIME类型匹配校验
如果存入数据库的图片格式不是JPEG,写死image/jpeg会导致图片无法渲染,可通过finfo扩展自动检测图片实际MIME类型。 - 修正后完整代码如下:
<a href="#" class="image"> <?php // 处理PostgreSQL bytea转义,获取原始二进制 $rawImg = pg_unescape_bytea($row['book_pic']); // base64编码 $base64Img = base64_encode($rawImg); // 自动检测MIME类型,解决格式不匹配问题 $finfo = new Finfo(FILEINFO_MIME_TYPE); $mime = $finfo->buffer($rawImg); // 输出img标签,注意base64后无多余空格 echo "<img src='data:{$mime};base64,{$base64Img}' alt='Image' class='pic-1'/>"; ?> </a>
- 额外排查方向
如果修改后仍无法显示,可先将$rawImg写入本地文件,检查文件是否能正常打开,排除图片存入数据库时就已损坏的问题。
内容的提问来源于stack exchange,提问作者Srinath Raghavan
相关产品推荐
相关产品推荐

