我遇到了Apple不幸决定创建一个实际上不是PNG文件格式的PNG文件格式的问题。我从应用程序IPA文件中提取了一个PNG图像文件,并尝试在Web浏览器上显示它,发现Web浏览器不知道如何显示它们并给出错误。我花了一些时间才发现原始的,解压缩的图像首先是问题所在。
在研究了这个问题并做了大量工作之后,我终于找到了这个脚本,因为我没有创建类来做我需要的知识:
https://gist.github.com/juban/8397183
作者说这是一个PHP脚本版本,它将苹果PNG文件转换为标准的PNG文件,以便它可以正常显示。有关更多信息,我正在运行PHP 5.5 +。
我提取图像文件的过程如下:
if ($zip->open($ipaFile) === TRUE) {
if($zip->locateName($iconFilePath.$iconFile) !== FALSE) {
if ($iconData = $zip->getFromName($iconFilePath.$iconFile)) {
$iOSNormalizer = new iOSPNGNormalizer();
$iconData = $iOSNormalizer->getNormalizedPNG($iconData);
file_put_contents($iconSaveFile.$newIconFile, $iconData);
}
}
}
iOSNormalizer是一个可以通过点击我给出的链接查看的课程。
当我在课程中运行时,我会挂起以下错误:
Warning: zlib_decode(): data error in mypage.php on line 524
Notice: Uninitialized string offset: 12840 in mypage.php on line 532
Notice: Uninitialized string offset: 12840 in mypage.php on line 532
......对于很多不同的行,这最后两个通知重复了很多次。发生的事情是苹果PNG文件的原始宽度和高度已恢复,遇到zlib_decode()错误,然后停止工作。输出的文件是具有原始高度和宽度的空白白色图像。 zlib_decode()没有很好地记录PHP,我不知道如何解决这个问题。我希望有人可以查看链接中的课程,并更好地理解为什么会发生这种情况。谢谢!
编辑:为了确保它与我从IPA文件中提取图标文件没有任何关系,我在我的问题末尾附带的图像上测试了以下代码,我仍然有相同的问题(再次,请参阅我的链接中的PHP类以查看函数getNormalizedPNG()的作用):$iconFile = "/path/AppIcon40x40@2x.png";
$newIconFile = "/path/converted.png";
$iOSNormalizer = new iOSPNGNormalizer();
$iconData = $iOSNormalizer->getNormalizedPNG($iconFile);
file_put_contents($newIconFile, $iconData);