繁体   English   中英

图像到base64编码的问题-PHP

[英]Image to base64 encoding issue - 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(“ 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 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上节省,请使用readfile()与嵌入式base64方法相比,对于服务器和客户端而言,速度更快,所需带宽更少,RAM更少。)

因此,也许您的问题出在您的哑剧类型上。 然后尝试这段代码两个解决方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM