每当我尝试使用PHP提供图片时,它都会说明该图片已损坏/损坏,并在Google Chrome浏览器中给出以下警告:
资源被解释为文档,但以MIME类型传输 图片/ png
但是,情况如下;
img
src中,则这些图像可以很好地工作我尝试过的例子:
$imgpath = 'assets/img/dropdown-arrow.png';
$type = pathinfo($imgpath, PATHINFO_EXTENSION);
$data = file_get_contents($imgpath);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
header('Content-Type: image/png;'); // also tried with charset=UTF-8 and such
echo base64_decode($base64);
exit();
示例2(在其他服务器上工作的示例):
// Set the content type header - in this case image/png
header('Content-Type: image/png; charset=UTF-8');
// integer representation of the color black (rgb: 0,0,0)
$background = imagecolorallocate($img, 0, 0, 0);
// removing the black from the placeholder
imagecolortransparent($img, $background);
// turning off alpha blending (to ensure alpha channel information
// is preserved, rather than removed (blending with the rest of the
// image in the form of black))
imagealphablending($img, false);
// turning on alpha channel information saving (to ensure the full range
// of transparency is preserved)
imagesavealpha($img, true);
// Output the image
imagepng($img);
---再说一次;我已经把我的框架切成中间人了,试图直接从index.php的第一行开始运行。
因此,出于某种奇怪的原因,我将content-type
设置为image/png
的那一刻;一切都很艰难。
有人会知道为什么会发生这种情况吗?这是我的代码遗漏的东西吗?这是我无法用我的代码(服务器端)解决的问题吗?我只是想念一些非常明显的东西吗?
我正在使用PHP-FPM在Apache 2.4.5上运行。 (尽管切换到PHP-FASTCGI并没有改变)在PHP 7.2.3上
连接:保持活动状态
内容类型: image / png
日期::格林尼治标准时间2018年7月13日星期五19:51:37
保持活动:超时= 5,最大= 99
服务器:Apache / 2.4.25(Debian)
传输编码:分块
显然,有人(不是我,是真的!)在<?php
标记之前的一个空格中放置了一个小文件,该文件已包含在MVC中。删除该空间可解决每个问题。因此,花了好几个小时才找到适合所有阅读者的课程:请确保您的代码格式正确,并始终将<?php
标签放在一开始。
答案 0 :(得分:3)
您可以直接输出它,而无需执行base64_encode / decode
$imgpath = 'assets/img/dropdown-arrow.png';
$data = file_get_contents($imgpath);
header('Content-Type: image/png;');
echo $data;
exit();
答案 1 :(得分:0)
在示例2中,标题表示您的数据是utf8编码的。 为什么? 您的数据是二进制文件 而且没有utf8编码