我目前遇到了fpdf的一个非常奇怪的问题。我找到了一个没有答案的类似问题:not a PNG file in FPDF。我有一个图像通过浏览器上传到我的文件服务器,然后拉入fpdf报告。当这个图像是png时,我得到错误:" FPDF错误:不是PNG文件"。当上传的图片是jpg时,我不会收到任何错误。这个问题似乎在几周前一夜之间出现了。
更奇怪的是,它只发生在新的png上传中。报告中有一个png正在生成。当我从系统下载该png并重新上传时,错误再次出现。
以下是我在尝试解决问题时采取的一些步骤:
我保存图片的方式没有任何改变,但这里是代码:
$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;
替代方法 - 我已经开始将png的转换为jpg,而不是重新编码图像。谢谢你的帮助。
答案 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