图像到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"(;

这里你对浏览器说CCD_ 1,然后:

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%左右,因此,如果你想要快速页面加载,或者你想要节省带宽,或者你想节省ram,与嵌入式base64方法相比,使用readfile((更快,需要更少的带宽,并且对服务器和客户端都需要更少的ram。(

所以你的问题可能出在你的mime类型上。然后尝试这个代码两个解决方案:

$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((

最新更新