首页 > 解决方案 > 图像到 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 值中。它仍然没有出现。

我在这里错过了什么?

提前致谢

标签: php

解决方案


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 方法相比,服务器和客户端都更快,需要更少的带宽,并且需要更少的内存。)


推荐阅读