根据PNG规范:
4.1.1。 IHDR映像头
IHDR块必须首先出现。
您的示例图像包含一个自定义关键块
CgBI作为第一个块,并且不符合该规范。这就是为什么您会得到例外。
实际上,您的图片似乎是“ iOS优化的PNG”。
来自http://fileformats.archiveteam.org/wiki/CgBI:
它与PNG不兼容。由于未知的“关键块”,不支持它的标准PNG解码器将正常运行。
现在,可能应该被视为中的错误
com.sun.imageio.plugins.png.PNGImageReader是:
IHDR在声称它可以读取输入之前,它不检查第一个块实际上是一个块。
您可以通过在您认为可以正常阅读的查看器/应用之一中读取图像来修复图像,然后将其写回为普通的PNG。我在OS
X上使用Preview进行了测试,效果很好。试试看。
如果在OS X上(使用开发工具),您还应该能够通过以下命令行使用Apple修改后的pngcrush:
xcrun -sdk iphoneos pngcrush -revert-iphone-optimizations infile.png outfile.png
如果您只想获取图像的宽度/高度,则无需阅读full
BufferedImages,只需获取an
ImageReader并使用其
getWidth(0)and
getHeight(0)方法(SO上已经有很多示例,因此无需重复)。
您可能还可以创建一个快速的PNG结构解析器,该解析器跳过该
CgBI块并
IHDR直接对其进行解析,以获取宽度/高度。



