<?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值中。仍然没有出现。
我在这里错过了什么?
预先感谢
答案 0 :(得分:1)
header(“ Content-type:image / jpeg; charset = utf-8”);
在这里您对浏览器i will send you an jpeg image
说,
然后:
echo '<img src="'.$src.'">';
在这里发送HTML。
由于您说这是jpeg图像,因此浏览器将尝试将 html 呈现为 jpeg 。由于基于ascii文本的HTML格式与基于二进制的jpeg格式完全不兼容,因此,当尝试呈现 image 时,浏览器将严重失败,并因某些错误而失败(可能是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%,因此,如果您想要快速的页面加载,或者要节省带宽,或者要节省ram,请使用与嵌入式base64方法相比,对于服务器和客户端,readfile()速度更快,所需带宽更少,所需内存更少。)
答案 1 :(得分:0)
所以也许您的问题出在您的哑剧类型上。然后尝试这段代码两个解决方案:
$path = 'domain.com/example/source.jpg';
$content = file_get_contents($path);
$file_info = new \finfo(FILEINFO_MIME_TYPE);
$mime_type = $file_info->buffer(file_get_contents($path));
$base64 = base64_encode($content);
$src = 'data:'.$mime_type.';charset=utf-8;base64,'.$base64;
echo '<img src="'.$src.'">';
注意:最好使用完整地址域中的路径,如果要使用路径,请使用readfile()