PHP: PNG 读取文件编码问题

PHP: PNG readfile encoding issue

我有这段代码可以将 PNG 文件输出到浏览器

header('Content-type: image/png');
header("Content-Length: " . filesize($cache_file));
readfile($cache_file);
exit();

文件$cache_file是这样保存的

imagepng(self::$image, self::$cache);

浏览器显示的图像损坏。当我下载它并用 npp 打开它时,我发现它是在 UTF-8 中编码的,所以我将编码更改为 ANSI 并且它在 windows 资源管理器

上正确显示

什么可能导致此编码问题?如何在保存或读取文件时修复它?

编辑:当我直接在浏览器上打开 PNG 时,它显示正确,这意味着问题发生在 readfile 级别 这不是我的服务器,所以我应该设置什么服务器 check/modify?

解决方法: 我用imagepng输出图片内容

public static function outputPNG($file)
{
    //clear any previous buffer
    ob_clean();
    ob_end_clean();
    header('Content-type: image/png');
    //i will be only outputting PNG images
    $im = imagecreatefrompng($file);
    imagesavealpha($im, true);
    imagealphablending($im, true);
    imagepng($im);
    exit();
}

您可以尝试在您的回复中添加一些额外的内容 headers:

header('Content-Transfer-Encoding: binary');
header('Content-Description: File Transfer');