[英]How is a 256x256 24-bit gradient PNG only 777 bytes?
这是有问题的文件:
如果您在十六进制编辑器中打开此 PNG 图像,您会注意到此文件只有 777 字节大。 这怎么可能? 请注意,每个像素都有不同的颜色值!
具有唯一像素的 24 位 256x256 图像应至少为 197 KB。
256*256*3 字节 = 196608 字节
这是使用 PNG 文件的某些隐藏功能还是使用某种黑客?
编辑:作为健全性检查,我已将 PNG 编码为 Base64,果然,它很小。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAABIAAAASABGyWs+AAACu0lEQVR42u3TAQkAMBDEsHuYf80T0oRa6G07qdrbDbIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYC0DxplBfxP7XIvAAAAAElFTkSuQmCC
首先,图像已经去除了几乎所有不需要的元数据:唯一存在的块是规范要求的块,以及用于指定图像物理尺寸的pHYs
块。 我们实际上可以删除该可选块以减少 21 个字节。
每条扫描线都有空操作过滤器或子过滤器。 这有助于压缩,但过滤没有太大区别。
但是压缩图像的主要方式是真正可压缩。 PNG 使用 zlib 压缩,它非常擅长压缩图像中的数据。 zlib 很容易预测每条扫描线的下一个值,因为每个像素与其周围的像素非常相似。 这是一个完美的渐变,这使得它真的可以压缩。 事实上, optipng
可以通过一些更积极的参数调整将该图像缩小到仅 571 字节。
图像的构造使得PNG 的过滤器类型 4,Paeth 过滤器完美地预测了第一行之后所有行的像素值,除了第一个绿色值的差异为 1,绿色向下和向右渐进。 第一行是红色的增量,使用过滤器类型 1,Sub,结果是序列 1 0 0 1 0 0 ...最终得到 196,098 个零、511 个 1 和 255 个四,这是高度可压缩的.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.