一直以来,我的Xcode项目编译偶尔会出现类似于While reading xx/BackgroundHomeScreen_5.png pngcrush caught libpng error的错误提示(不是警告),但是这个错误并不会影响应用运行,所以也就没管,今天正好有空解决这个问题。
根据网上搜到的资料,说出问题的png文件不是真正的png文件,可能是个jpg文件,实际的文件头信息是不一样的,造成不能识别。
然后我搜了一下Mac里检测图片真正格式的途径,找到了用文件头来检测图片格式的方法:
- JPEG/JPG - 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) - 文件结束标识 (2 bytes): $ff, $d9 (EOI)
- TGA - 未压缩的前5字节 00 00 02 00 00 - RLE压缩的前5字节 00 00 10 00 00
- PNG - 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
- GIF - 文件头标识 (6 bytes) 47 49 46 38 39(37) 61 G I F 8 9 (7) a
- BMP - 文件头标识 (2 bytes) 42 4D B M
- PCX - 文件头标识 (1 bytes) 0A
- TIFF - 文件头标识 (2 bytes) 4D 4D 或 49 49
- ICO - 文件头标识 (8 bytes) 00 00 01 00 01 00 20 20
- CUR - 文件头标识 (8 bytes) 00 00 02 00 01 00 20 20
- IFF - 文件头标识 (4 bytes) 46 4F 52 4D F O R M
- ANI - 文件头标识 (4 bytes) 52 49 46 46 R I F F
可以通过UltraEdit来打开图片,16进制查看。然而我发现出现错误提示的png文件并不是jpg文件,文件头是标准的png格式。这能说明png内容有问题吗?也并不是,在Mac下能正常预览这个png图片。
也有网友说可以用PS打开图片然后重新导出为PNG图片。是可以做,不过我考虑到这个png图片刚才格式有点大,就采用了另一种方法:打开tinypng.com,上传图片后再下载被压缩后的图片,一举两得。
替换了图片后,没有发现再报错。也许只是暂时不报错了,以后继续观察。
参考: