PNG

众所周知,PNG 是很常用的图片格式。先前在 dino.lol 生成不同颜色的像素小恐龙的时候,对 PNG 做了一些了解。这里做个简单地介绍。

便携式网络图形(英语:Portable Network Graphics,缩写:PNG)是一种无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。PNG的开发目标是改善并取代GIF作为适合网络传输的格式而不需专利许可,所以被广泛应用于互联网及其他方面上。

https://zh.wikipedia.org/wiki/PNG

PNG 的动画方案

我也是看过了维基百科之后,才了解到 PNG 是为了取代 GIF 而产生的,虽然我们对 PNG 的一般了解往往停留在“动图”上。

然后 PNG 也是有动画方案的,早期有 MNG,后来有更简单而强大的 APNG。APNG 的图像更为流畅,并且不会产生锯齿。PNG 内含多个数据块,并且允许图像查看器舍弃不认识的数据块。APNG 图像格式同样为 .png,这样对于不支持 APNG 的查看器,可以显示其第一帧。

elephant.gif VS elephant.png, 图像来自:https://apng.onevcat.com/demo/

GIF

{{0xc0031a7a90 0xc0031a7a90 https://res.cloudinary.com/leveth/image/upload/v1550738437/zb/2019/02/elephant-gif.gif elephant.gif elephant.gif GIF 337KB elephant.gif GIF 337KB 0xc0031c5ce0} 0 false}
elephant.gif

APNG

{{0xc0031a7a90 0xc0031a7a90 https://res.cloudinary.com/leveth/image/upload/v1550738418/zb/2019/02/elephant-png.png elephant.png elephant.png APNG 379KB elephant.png APNG 379KB 0xc0031c5d40} 1 false}
elephant.png

{{0xc0031a7a90 0xc0031a7a90 https://res.cloudinary.com/leveth/image/upload/v1550736320/zb/2019/02/can-i-use-apng.png  Can I use APNG Can I use APNG 0xc0031c5da0} 2 false}

PNG 的索引模式

PNG 除了通常的颜色模式,还支持灰度和索引。这个索引模式,在某些情况下有很大用处。索引模式下,图片有限的颜色会编为一个调色板,而每个像素的颜色值,会用调色板的索引值来代替。这样一方面会减少大量的体积,另一方面在替换颜色上会比较快捷。

就拿我给像素恐龙换颜色来说,一张图片只有五个颜色。那么如果我想把恐龙头上的红色替换为蓝色,只需要在调色板中找到颜色对应的索引,然后更改调色板中的颜色,保存就可以了,而不需要逐个对颜色进行替换。

也就是说,如果颜色比较少的时候,比如小图标,直接用图片的索引模式会节省大量空间。

{{0xc0031a7a90 0xc0031a7a90 https://res.cloudinary.com/leveth/image/upload/v1550737389/zb/2019/02/dont-use-palettes.png  don’t use palettes in photopea.com don’t use palettes in photopea.com 0xc0031c5e00} 3 false}

图为使用 photopea.com 导出 PNG 图片时,窗口中的 Don’t use palettes 选项。如果未勾选,则导出索引模式的 PNG 图片。否则则为 RGB 模式。

{{0xc0031a7a90 0xc0031a7a90 https://res.cloudinary.com/leveth/image/upload/v1550738033/zb/2019/02/diff-pals.png  图像体积对比 图像体积对比 0xc0031c5e60} 4 false}