有没有办法计算可以使用PNG压缩的任何图像的最大尺寸?
我需要知道,(例如)分辨率为350x350(px)的PNG不能大于“X”KB。 (对于恒定的质量压缩,如90)
“X”值是我正在寻找的值。或者在数学表达中
350px * 350px * (90q) < X KB
我不太熟悉PNG压缩算法,但特定分辨率可能有最大值?
P.S。 :PNG在这种情况下没有alpha。
答案 0 :(得分:2)
在最大的情况下,数据是不可压缩的(例如,如果图像大小为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
压缩&#34;质量&#34;没有进入这个。 大多数应用程序可能会分开 将IDAT分成较小的块,通常每块8k字节, 所以在350x350图像的情况下会有 44个IDAT块,因此为IDAT块开销添加43 * 12。
作为检查,可以写入1x1 16位RGB图像 一个72字节的PNG和一个1x1的8位灰度图像 67个字节。如果图像是隔行扫描的或有任何图像 辅助块,或具有alpha通道,它会 自然就更大了。