有没有办法计算可以使用 PNG 压缩的任何图像的最大尺寸?
我需要知道,(例如)分辨率为 350x350 (px) 的 PNG 不能大于“X”KB。(对于恒定质量的压缩,例如 90)
“X”值是我正在寻找的值。或者用数学表达式
350px * 350px * (90q) < X KB
Run Code Online (Sandbox Code Playgroud)
我不太熟悉 PNG 压缩算法,但特定分辨率可能有最大值?
PS:在这种情况下,PNG 没有 alpha。
最大情况发生在数据不可压缩时
(例如,如果图像分辨率为 1x1,
或者图像较大但包含随机不可压缩数据)。
这将使最大尺寸:
8 // PNG signature bytes
+ 25 // IHDR chunk (Image Header)
+ 12 // IDAT chunk (assuming only one IDAT chunk)
+ height // in pixels
* (
1 // filter byte for each row
+ (
width // in pixels
* 3 // Red, blue, green color samples
* 2 // 16 bits per color sample
)
)
+ 6 // zlib compression overhead
+ 2 // deflate overhead
+ 12 // IEND chunk
Run Code Online (Sandbox Code Playgroud)
压缩“质量”不在此列。
大多数应用程序可能会将IDAT块分成更小的块,通常每个块为 8 KB,因此在 350x350 图像的情况下,将有 44 个 IDAT 块,因此为 IDAT 块开销添加 43*12。
作为检查,1x1 16 位 RGB 图像可以写入 72 字节 PNG,而 1x1 8 位灰度图像为 67 字节。
如果图像是交错的,或者有任何辅助块,或者有 Alpha 通道,它自然会更大。
| 归档时间: |
|
| 查看次数: |
3107 次 |
| 最近记录: |