PNG介绍
PNG (Portable Network Graphics) 是一种无损的位图图像格式。它是为了取代GIF格式而设计的,并且可以支持更多的颜色和透明度。
PNG图像使用一种称为DEFLATE的无损数据压缩算法来减小文件大小,因此不会损失图像质量。PNG图像支持8位灰度图像、索引彩色图像和24位真彩色图像,可以支持Alpha通道透明度,这意味着可以在图像中创建半透明的效果。
PNG图像也支持多层图像,这意味着可以将多个图像组合在一起,每个图像可以具有自己的透明度和颜色。PNG图像还支持动画,使用一种称为APNG的扩展格式来实现。与GIF格式不同,APNG可以支持真彩色和半透明图像,并可以使用更高的帧率来实现更流畅的动画效果。
libpng网址
http://www.libpng.org/
libpng代码
http://www.libpng.org/pub/png/libpng.html
libpng手册
http://www.libpng.org/pub/png/libpng-1.4.0-manual.pdf
MNG网址
http://www.libpng.org/pub/mng/
PNG spec
https://www.w3.org/TR/png/
PNG图像格式的发展历程如下:
PNG特点
PNG格式的主要特点是无损压缩、支持透明度、支持多种色彩模式和无版权限制。我们和之前的JPEG,GIF进行直接对比,如下表:
文件结构
PNG标准中定义了18种块类型,其中包括4个关键块和14个附属块。
关键块包括:IHDR,包含头部元数据,在签名后立即需要;IEND,必须作为最后一个块来完成文件;IDAT,一个或多个块存储压缩像素数据;PLTE,存储颜色调色板,仅在索引颜色模式下需要。
规范中的附属块分别对应着颜色空间信息(cHRM、gAMA、iCCP、sBIT、sRGB)、像素尺寸和宽高比(pHYs)、建议的调色板(sPLT)、建议背景的杂项信息(bKGD)、颜色直方图(hIST)、透明度信息(tRNS)、文本信息(iTXt、tEXt、zTXt)和时间戳信息(tIME)。
PNG支持五种颜色模式,其中包括灰度和真彩色,两者都具有包含alpha通道的附加模式,以及索引颜色模式。颜色模式在IHDR中设置,其他块中可选的参考颜色点(cHRM)和配置文件(ICCP)。透明度可以通过alpha通道或指示透明度的预选颜色来实现。
此外,编码器可以包含自定义块类型,以供特定应用程序使用,例如Adobe Photoshop的专有块。除了起始和结束块之外,文件中的块的顺序或位置只有宽松的约束。大多数块需要在第一个IDAT块之前存在(如下图),但文本信息除外,它可以在IEND之前的文件的任何位置出现。
透明度
在简单的形式中,透明度表示完全不可见的东西。徽标和图标通常需要放置在颜色可变的背景上。
这些徽标和图标的背景最好是透明的,以便可以在多个背景变化上使用单个图像。
JPEG图像不支持透明度,因此不适用于此类情况。
GIF图像通过将调色板中的一种颜色声明为透明(索引透明度)来支持透明度。由于缺少部分透明度,边缘(特别是圆角或太详细的边缘)会产生较差的锯齿效果。
PNG图像以两种方式支持透明度——插入允许部分透明的 alpha 通道或通过将单一颜色声明为透明(索引透明)。部分透明度使边缘平滑地融入背景。PNG8 图像只能支持索引透明度,而 PNG24 图像可以支持 alpha 通道透明度。

多色彩模式

这 3 种格式可以支持的颜色数量存在显着差异。
JPEG图像可以支持大约 1600 万种颜色。这就是它们适合存储自然场景图像的原因。
GIF图像限制为 256 种颜色。如果使用索引透明度,则将这 256 种颜色中的一种指定为透明,其余 255 种颜色用于其他颜色。
PNG图像主要有两种模式——PNG8 和 PNG24。PNG8 可以支持多达 256 种颜色,而 PNG24 可以像 JPEG 图像一样处理多达 1600 万种颜色。PNG8 用于颜色较少的简单形状,PNG24 用于高质量、复杂的徽标和透明背景上带圆角的形状。当然之后还发展了PNG32的格式:带有8bit的透明度分量。
查看工具
https://entropymine.com/jason/tweakpng/
https://www.nayuki.io/page/png-file-chunk-inspector
继续阅读
阅读原文