PHP - " FPDF错误:不是PNG文件",但图像为

时间:2015-10-02 19:18:29

标签: php png fpdf

我目前遇到了fpdf的一个非常奇怪的问题。我找到了一个没有答案的类似问题:not a PNG file in FPDF。我有一个图像通过浏览器上传到我的文件服务器,然后拉入fpdf报告。当这个图像是png时,我得到错误:" FPDF错误:不是PNG文件"。当上传的图片是jpg时,我不会收到任何错误。这个问题似乎在几周前一夜之间出现了。

更奇怪的是,它只发生在新的png上传中。报告中有一个png正在生成。当我从系统下载该png并重新上传时,错误再次出现。

以下是我在尝试解决问题时采取的一些步骤:

  1. 我确定图像实际上是png(通过其属性)。
  2. 我保存图片的方式没有任何改变,但这里是代码:

    $original = $time."_".$name."_o.".$extension;
    $thumbnail = $time."_".$name."_t.".$extension;  
    include('SimpleImage.php');
    $image = new SimpleImage();
    $image->load($_FILES['file']['tmp_name']);
    $image->save($A_path."images/".$original);
    $image->resizeToHeight(200);
    $image->save($A_path."images/thumbs/".$thumbnail);
    $photo = "images/".$original;
    $thumb = "images/thumbs/".$thumbnail;
    
  3. 我已检查过他们是否对PNG格式或FPDF更新进行了更改,但没有运气。
  4. 我已经将一个jpg转换为png通过gimp。
  5. 通过gimp将png转换为jpg,然后将jpg上传到系统不会产生任何错误。
  6. 替代方法 - 我已经开始将png的转换为jpg,而不是重新编码图像。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

通过手动将图片格式更改为JPG然后重复该过程来修复它。

答案 1 :(得分:1)

错误消息表明文件的前八个字节有错误(" png签名")。

使用" od -c |头-1"检查前16个字节。每个PNG文件 从这些开始:

211   P   N   G  \r  \n 032  \n  \0  \0  \0  \r   I   H   D   R

如果您愿意,请使用" xxd file.png |头-1"并希望看到这个:

0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR

这16个字节是PNG签名以及第一个块的长度和名称。前8个字节是格式 name,以及设计的换行符(换行符)和回车符 检测各种传输错误。接下来的8个字节就是开头 IHDR块的长度必须是长度= 13,表示为4字节整数,名称=" IHDR"。

有关详细信息,请参阅PNG specification

答案 2 :(得分:0)

检查图像的深度。 FPDF支持24位深度(我不确定32位深度),它也不支持alpha通道。 我尝试使用ImageMagick(或windows下的paint.net)重新编码为png。

convert input.png -depth 8 +matte output.png