图像到base64编码的问题-PHP

时间:2018-08-04 08:08:16

标签: 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值中。仍然没有出现。

我在这里错过了什么?

预先感谢

2 个答案:

答案 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()