php - 图像到 base64 编码问题 - PHP
问题描述
<?php
header("Content-type: image/jpeg;charset=utf-8'");
$path = 'example/source.jpg';
$da = file_get_contents($path);
$base64 = base64_encode($da);
$src = 'data:image/jpeg;charset=utf-8;base64,'.$base64;
echo '<img src="'.$src.'">';
?>
php v5.6.2
我厌倦了在调试中复制 $src 值并粘贴到 img src 值中。它仍然没有出现。
我在这里错过了什么?
提前致谢
解决方案
header("内容类型: image/jpeg;charset=utf-8");
在这里你对浏览器说i will send you an jpeg image
,然后:
echo '<img src="'.$src.'">';
在这里你发送 HTML。
因为您说它是 jpeg 图像,所以浏览器会尝试将您的html呈现为jpeg。由于基于 ascii 文本的 HTML 格式与基于二进制的 jpeg 格式完全不兼容,因此浏览器在尝试渲染图像时会严重失败,并且会出现一些错误(可能image is corrupt
或类似的东西)。
您可以修复您的Content-Type
标头以指定您正在发送 HTML,然后浏览器将(可能成功!)尝试呈现它,例如:
header("Content-type: text/html;charset=utf-8");
或者您可以修改代码以实际将图像作为 jpeg 发送,例如:
<?php
header("Content-type: image/jpeg");
$path = 'example/source.jpg';
readfile($path);
(顺便说一句,base64 编码的 jpeg 图像将比原始 jpeg 图像大 33% 左右,因此,如果您想要快速页面加载,或者您想要节省带宽,或者您想要节省内存,请使用 readfile()与嵌入式 base64 方法相比,服务器和客户端都更快,需要更少的带宽,并且需要更少的内存。)
推荐阅读
- asp.net - Azure AppService 未在 Asp.net 核心应用程序中映射
- reactjs - 带有 React Router 的 Reactjs Material-UI 菜单
- javascript - 从数组动态创建 html 表
- android - 如何获取在 Android lint 检查中调用某些内容的函数的名称?
- javascript - 带有带有仪表板的卡片/面板的简单前端?
- javascript - 当我运行“npm install”时,我的终端上出现此错误消息“npm ERR!Linux 5.4.72-microsoft-standard-WSL2”
- python - 如何解决 Python 中的开放集分类问题?
- java - 我不确定为什么 myst() 以这种方式作为递归方法工作
- 3d - 有没有办法将 Apple Metal 渲染的图形编码为视频文件?
- swiftui - SwiftUI:在容器内均匀分布视图?