在 图片优化时 , 需要将 png 格式的图片转为 webp 格式 , 但是注意不要将带 alpha 透明度通道的图片转为 webp 格式 , 在某些 Android 版本中 只支持 没有透明度通道的 webp 图片 ;
下面开始分析 如何 识别 png 图片中的 alpha 通道信息 ;
使用 二进制分析工具 HxD Hex Editor 打开一张 png 格式的图片 ,
下面开始分析 png 图片的文件格式 :
png 图片的前 8 个字节 , 0 ~ 7 字节是 png 图片的文件头信息 ,
89 50 4E 47 0D 0A 1A 0A
" 文件头 " 之后就是若干 " 数据块 " ,
数据块的构成如下 :
数据块长度 ( 4 字节 ) + 数据块类型 ( 4 字节 ) + 数据块数据 ( n 字节 ) + CRC 校验位 ( 4 字节 )
文件头之后的数据块是 IHDR 类型的数据块 , 又称为 " 文件头数据块 " , 其中包含了 png 图片的所有信息 ;
IHDR 数据块结构 :
该图片的颜色类型为 06 , 说明该图片时一个带 透明度 通道的 彩色图片 , 不能转为 webp 格式 ;
可参考 【Android 应用开发】Paint 滤镜原理 之 图像结构 ( 图片文件二进制分析 | PNG文件结构 | 数据块结构 | IHDR 数据块详解 ) 博客进行分析 ;
IHDR 数据块简介 :
IHDR 数据块 结构 :
通道数据的灰度图像 ;
通道数据的真彩色图像 ;
Android Plugin DSL Reference 参考文档 :