一、问题成因及解决过程

某日,在 Android 项目中添加了一张图片后,项目构建不成功,并报错 AAPT err(Facade for ......): libpng error: Not a PNG file. 。经过一番折腾,我最终发现,引入的那张图片的格式为 PNG 但文件后缀为 jpg ,这导致 Android Studio 的 AAPT 构建出错。我将文件后缀改回 png 后,项目正常运行。

发现问题的过程:

  • 首先,明确是图片的问题
  • 其次,锁定了某个文件,原因:该文件图片比较大,但是后缀却是jpg
  • 按常识来看,png 能够用于无损压缩,文件一般比较大;jpg 常用于有损压缩,文件大小一般相对较小。
  • 所以果断断定是此文件的问题,然后改了后缀,项目成功跑起来

二、区分图片文件格式的方法

这个我们一个启示,一个能够被正常打开并浏览的图片,其图片格式与文件图片后缀名不一定是一致的。因此,开发者在开发过程中要对此类文件进行文件后缀的校正。

2.1 以后缀定格式

根据文件的后缀来判断图片文件的格式,这是一种快捷的方法,但不是唯一且准确的方法。

2.2 查看图片文件头

图片文件头一般保存着文件的一些 meta-data,其中就包括了图片的格式。以下列举了几种常见文件格式的文件头:

  • JPEG (jpg),文件头:FF D8 FF E0 00 10 4A 46 49 46
  • PNG (png),文件头:89 50 4E 47 0D 0A 1A 0A
  • GIF (gif),文件头:47 49 46

一般文件内容开头都会有一个文件类型的标记:
这是一个PNG文件的内容开头的部分:

可以看到不仅有有文件类型的标记,还有尺寸、色彩类型等等等信息

作者:不知语冰
链接:https://www.zhihu.com/question/28161418/answer/41174837
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。