繁体   English   中英

256x256 24 位渐变 PNG 怎么只有 777 字节?

[英]How is a 256x256 24-bit gradient PNG only 777 bytes?

这是有问题的文件:

渐变 PNG

如果您在十六进制编辑器中打开此 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM