Java Can';无法从IPA读取PNG

Java Can';无法从IPA读取PNG,java,png,javax.imageio,Java,Png,Javax.imageio,我无法读取从IPAs提取的PNG文件 BufferedImage bufferedImage = ImageIO.read(new File("z:\\icon.PNG")); 抛出:“读取PNG头时发生I/O错误” 我可以阅读任何其他PNG,只要它不是来自IPA。有什么想法吗?简短回答:这不是PNG。这是一个文件,是苹果公司专有的PNG扩展名。大多数软件无法读取它们,因为它们在IHDR之前插入了一个自定义的CgBI关键块,从而违反了PNG规范 有一个软件(如上面的链接所示)可以读取并将其转换

我无法读取从IPAs提取的PNG文件

BufferedImage bufferedImage = ImageIO.read(new File("z:\\icon.PNG"));
抛出:“读取PNG头时发生I/O错误”


我可以阅读任何其他PNG,只要它不是来自IPA。有什么想法吗?

简短回答:这不是PNG。这是一个文件,是苹果公司专有的PNG扩展名。大多数软件无法读取它们,因为它们在IHDR之前插入了一个自定义的CgBI关键块,从而违反了PNG规范


有一个软件(如上面的链接所示)可以读取并将其转换为标准PNG。还有一个可用的(我自己还没有测试过),你可能想看看

什么是IPA?如果您看到该错误,几乎可以肯定,这意味着png文件已损坏/不是有效的png文件,这可能意味着提取过程出错(在这种情况下,我们需要查看从png提取的任何代码以提供帮助。).ipa文件是存储iOS应用程序的iOS应用程序归档文件。它基本上只是一个zip文件。您可以将任何ipa文件重命名为zip,并提取PNG文件。酷-如上所述,我们需要查看您用于从ipa(或zip)文件提取PNG的代码。这可能就是问题所在(请检查“icon.PNG”是否会在正常的图像编辑器中打开),我正在使用ZipInputStream打开IPA,然后在本地保存PNG。但是,正如我之前指出的,我如何提取它并不重要。我可以手动提取它,但仍然会得到相同的错误。微软的Edge可以很好地显示它,而Chrome则不行。显然,多亏了苹果,需要一些特殊的处理。我想看看PNG(二进制)。我知道文件格式是如何工作的,所以我可以手动分析,看看有什么问题。啊,非常感谢你的帮助!我会调查的,这很有效。如果苹果使用自己的文件扩展名,它可能不会那么混乱。但是,通过检查文件内容来识别文件的软件仍然会将文件识别为PNG,因此他们还需要更改“魔法”标识符。相反,苹果可以在IHDR之后添加一个额外的块,以指定RGBA->BGRA顺序,并保持格式不变。这将允许所有PNG软件读取它们,除非有特殊支持,否则它们只会显示不正确。但我猜其基本原理是,这只是苹果软件独家使用的一种“内部格式”。。。