根据分辨率的最大 PNG 大小

Maximum PNG size according to resolution

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

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

"X" 值就是我要找的值。或者用数学表达式

350px *  350px * (90q) < X KB

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

P.S。 : 在这种情况下,PNG 没有 alpha。

在最大的情况下,数据是不可压缩的(例如,如果图像大小为 1x1,或者如果图像更大但包含随机的不可压缩数据)。所以最大尺寸是

8 // PNG signature bytes
+ 25 // IHDR chunk
+ 12 // IDAT chunk (assuming only one IDAT chunk)
+ height //pixels
  * ( 1 // filter byte for each row
      + (width // pixels
         * 3 // Red, blue, green color samples
         * 2 // 16 bits per color sample
        )
    )
+ 6 // zlib compression overhead
+ 2 // deflate overhead
+ 12 // IEND chunk

压缩"quality"不在此列。 大多数应用程序可能会将 IDAT 分成更小的块,通常每个 8kbytes, 所以对于 350x350 的图像,会有 44个IDAT块,所以IDAT块开销增加43*12。

作为检查,1x1 16 位 RGB 图像可以写成 一个 72 字节的 PNG 和一个 1x1 的 8 位灰度图像是 67 字节。如果图像是交错的或有任何 辅助块,或具有 alpha 通道,它将 自然要大