根据分辨率的最大 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 通道,它将
自然要大
有没有办法计算任何用 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 通道,它将 自然要大