PHP:imagepng和imagejpeg输出无效的16x16图片

时间:2018-09-19 07:27:49

标签: php image

远程服务器上的问题(而相同的php脚本在本地上运行)是

1)从系统路径加载PNG图片:

    $imgpath = "absolute/path/to/a/png/image";
    $img = imagecreatefrompng($imgpath);

文件和存储文件的文件夹具有正确的chmod和chown设置,我可以输出正确的图像大小(用于测试):

    echo imagesx($img)." x ".imagesy($img);

上一行输出256 x 64,它是期望的图像尺寸。我认为这意味着$img对象已从文件中正确加载。

2)当我尝试使用以下方法输出图像时:

    header('Content-type: image/png');
    imagepng($img);
    imagedestroy($img);

...浏览器显示一个16 x 16像素大小的空白图像。

Screenshot of how it looks like

3)如果我尝试使用直接的http url打开同一文件,则浏览器会正确打开它(预期的256 x 64图像带有一些色彩鲜艳的内容)。

Here is how image looks like when opened with direct link

4)如果我删除了header('Content-type....,则imagepng将按预期输出png文件内容:

�PNG IHDR@z?>� pHYs���+�IDATx��]ytչ����͒-�Y����$�� ��f!$� Jh M)-�+=��q�Bii�e����ihi d!!!�B�=^B�D��E��}��y���I�H��s��䜌>ݙ{�߽�~����ct�e���]���~....

(此处仅显示输出的一部分)

5)当我将输出与使用nano的远程服务器上的输出进行比较时,字节和文件大小似乎100%匹配。如果我使用浏览器中的直接URL下载图像,文件大小也完全相同。

6)我还尝试使用不同的方法输出图像,例如fpassthruecho file_get_contents(...并为此设置标题(添加内容大小等)。所有结果都一样。

我要疯了。任何人都知道可能是什么问题吗?

P.S。请求状态为200,日志文件中没有错误,也没有服务器错误。

P.P.S。当我使用直接链接和通过PHP脚本打开图像时,我已经比较了请求和响应头。它们是完全一样的。

1 个答案:

答案 0 :(得分:3)

重现此问题的唯一方法是在更改标题之前输出内容。您能否检查<?php标记前是否没有空格以及是否有其他可能的输出