PNG图片详解与加密解密方法.pdf

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PNG图片详解与加密解密方法
PNG文件格式分为PNG-24和PNG-8,其最大的区别是PNG-24是用24位来保存一个像素值,是真彩色,而PNG-8是用8位索引值来在调色盘中索引一个颜色,因为一个索引值的最大上
限为2的8次方既128,故调色盘中颜色数最多为128种,所以该文件格式又被叫做PNG-8 128仿色。

PNG-24因为其图片容量过大,而且在Nokia和Moto等某些机型上创建图片失败和显
示不正确等异常时有发生,有时还会严重拖慢显示速度,故并不常用,CoCoMo认为这些异常和平台底层的图像解压不无关系。

不过该格式最大的优点是可以保存Alpha通道,同事也曾有过利用该图片格式实现Alpha 混合的先例,想来随着技术的发展,手机硬件平台的提
升,Alpha混合一定会被广泛的应用,到那时该格式的最大优势才会真正发挥。

?
PNG-8文件是目前广泛应用的PNG图像格式,其主要有六大块组成:?1.PNG文件标志,为固定的64个字节:0x89504e47 0x0d0a1a0a ?2.文件头数据块IHDR(header chunk) 3.调色板数据块PLTE(palette chunk) 4.sBIT,tRNS块?等。

5.图像数据块IDAT(image data chunk) 6.图像结束数据IEND(image trailer chunk),固定的96个字节:0x00000000
0x49454e44 0xae426082 ?这六大块按顺序排列,也就是说IDAT块永远是在PLTE块之后,期间也会有许多其他的区块用来描述信息,例如图像的最后修改时间是多少,图像的创建者是谁等…
??数据块1-4:?
除了PNG文件标志,其中四大数据块和文件尾都是由统一的数据块文件结构描述的:? Chunk Length: 4byte?
Chunk Type: 4byte?
Chunk Data: Chunk Length的长度?
Chunk CRC: 4byte ?例如IHDR块的数据长度为13,即? Chunk Length = 13 ?
Chunk Type ="IHDR"
IHDR块:
?用来描述图像的基本信息,其格式为:
?图像宽: 4byte
?图像高: 4byte
?图像色深: 4byte
?颜色类型: 1byte
?压缩方法: 1byte
?滤波方法: 1byte
?扫描方法: 1byte
PLTE块:?这个就是传说中放置调色盘数据的地方啦,其格式为:?
循环?
RED: 1byte?
GREEN:1byte?
BLUE: 1byte?
END
?循环长度嘛,不就是Chunk Length / 3的长度嘛,而且Chunk Length一定为3的倍数。

tRNS块:?这个块时有时无,主要是看你是否使用了透明色。

该区块的格式为:?
循环?
if(对应调色盘颜色非透明)?
0xFF: 1byte?
else?
0x00: 1byte?
END?
循环长度为调色盘的颜色数,相当于调色盘颜色表的一个对应表,标识该颜色是否透明,0xFF 不透明,0x00透明。

故如果用UltraEdit查看PNG文件的二进制编码,如果看到一大片FF,一般就是tRNS区块啦,因为一个PNG文件一般只有一个透明色。

?
?IDAT块:
?这个就是存放图像数据的地方啦,这里要注意的是一个PNG文件可能有多个IDAT区块,而其他三大区块只可能有一个。

?IDAT 区块是经过压缩的,所以数据不可读,压缩算法一般为LZ77滑动窗口算法,如果硬要看里面的数据的话,用zlib库也可以看
IEND块:
?该区块虽然也按照数据块的结构,但Chunk Data是没有的,所以是固定的96个字节:
0x00000000
0x49454e44。

相关文档
最新文档