PHP接口返回Base64图片时img标签显示异常问题排查
问题原因与解决方案
第二个img标签显示破碎的核心原因是:当通过URL请求图片时,你返回的是带data:image/png;base64,前缀的Base64字符串,而浏览器期望服务器返回原始的二进制图片数据,而非Data URI格式的文本。
具体分析
- 第一个img直接使用Data URI作为src,浏览器原生支持解析这种格式,所以能正常显示。
- 当请求
?img=Y时,你的代码输出的是完整的Data URI字符串(包含前缀和Base64内容),但浏览器会把这个字符串当作二进制图片数据去解析,自然无法识别,导致图片破碎。
修复代码
修改?img=Y分支的逻辑,让服务器返回正确的图片数据:
if ( isset($_GET['img']) && $_GET['img'] === 'Y' ) { // 提取纯Base64编码部分,移除Data URI前缀 $base64Raw = substr($smiley, strpos($smiley, ',') + 1); // 将Base64解码为原始PNG二进制数据 $imageBinary = base64_decode($base64Raw); // 设置响应头,告诉浏览器这是PNG图片 header('Content-Type: image/png'); // 输出二进制图片数据 echo $imageBinary; exit; }
修复逻辑说明
当浏览器请求图片URL时,服务器返回PNG格式的二进制数据,同时通过Content-Type头明确告知浏览器内容类型,浏览器就能正确解析并渲染图片了。
内容的提问来源于stack exchange,提问作者abe1432181
相关产品推荐
相关产品推荐

