根据分辨率的最大 PNG 尺寸

The*_*uad 3 compression png

有没有办法计算可以使用 PNG 压缩的任何图像的最大尺寸?

我需要知道,(例如)分辨率为 350x350 (px) 的 PNG 不能大于“X”KB。(对于恒定质量的压缩,例如 90)

“X”值是我正在寻找的值。或者用数学表达式

350px *  350px * (90q) < X KB
Run Code Online (Sandbox Code Playgroud)

我不太熟悉 PNG 压缩算法,但特定分辨率可能有最大值?

PS:在这种情况下,PNG 没有 alpha。

Gle*_*son 7

来自此处的 PNG 格式:

最大情况发生在数据不可压缩时
(例如,如果图像分辨率为 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 通道,它自然会更大。