Compression 根据分辨率的最大PNG大小
有没有一种方法可以计算出用PNG压缩的任何图像的最大大小 我需要知道,例如,分辨率为350x350(px)的PNG不能大于“X”KB。(对于恒定质量的压缩,如90) “X”值就是我要找的值。或者用数学表达Compression 根据分辨率的最大PNG大小,compression,png,Compression,Png,有没有一种方法可以计算出用PNG压缩的任何图像的最大大小 我需要知道,例如,分辨率为350x350(px)的PNG不能大于“X”KB。(对于恒定质量的压缩,如90) “X”值就是我要找的值。或者用数学表达 350px * 350px * (90q) < X KB 350px*350px*(90q)
350px * 350px * (90q) < X KB
350px*350px*(90q)
我不太熟悉PNG压缩算法,但对于特定的分辨率可能有一个最大值
注意:在这种情况下,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
压缩“质量”不包括在内。
大多数应用程序可能会将
IDAT为较小的数据块,通常每个数据块为8KB,
因此,在350x350图像的情况下
44个IDAT块,因此为IDAT块开销添加43*12
作为检查,1x1 16位RGB图像可以按如下方式写入
一个72字节的PNG和一个1x1的8位灰度图像
67字节。如果图像是隔行扫描的或有任何
辅助块,或具有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
压缩“质量”不包括在内。
大多数应用程序可能会将
IDAT为较小的数据块,通常每个数据块为8KB,
因此,在350x350图像的情况下
44个IDAT块,因此为IDAT块开销添加43*12
作为检查,1x1 16位RGB图像可以按如下方式写入
一个72字节的PNG和一个1x1的8位灰度图像
67字节。如果图像是隔行扫描的或有任何
辅助块,或具有alpha通道,它将
当然要更大。相关的,可能是dup:你说得对!搜索问题时,我没有正确的标签。请不要混淆“分辨率”和“大小”。分辨率是一个绝对值:每个(绝对)测量单位的像素数。典型的单位是“每英寸像素数”,或“ppi”。你问的是尺寸,仅以像素为单位。相关的,可能是dup:你说得对!搜索问题时,我没有正确的标签。请不要混淆“分辨率”和“大小”。分辨率是一个绝对值:每个(绝对)测量单位的像素数。典型的单位是“每英寸像素数”,或“ppi”。你要问的是尺寸,仅以像素为单位。哎呀,我忘了去年我回答了这个问题的一个副本。在这里,我说deflate开销是5个字节,但是我在这里的测试表明它只能是2个字节。读rfc-1951时,我一定是把位和字节弄混了。极端来说:1字节长度的IDAT块有效吗?规范中似乎没有任何内容表明它不是。。。因此,您可以为每个块添加12个字节的巨大开销—每个块都是一个输入字节!我想这取决于OP(认为他)需要知道这一点的原因。@Jongware,是的,一个包含大量1字节数据(甚至零字节数据)IDAT块的PNG是有效的;解码器连接它们的内容以获得zlib数据流。哎呀,我忘了去年我已经回答了这个问题的一个副本。在这里,我说deflate开销是5个字节,但是我在这里的测试表明它只能是2个字节。读rfc-1951时,我一定是把位和字节弄混了。极端来说:1字节长度的IDAT块有效吗?规范中似乎没有任何内容表明它不是。。。因此,您可以为每个块添加12个字节的巨大开销—每个块都是一个输入字节!我想这取决于OP(认为他)需要知道这一点的原因。@Jongware,是的,一个包含大量1字节数据(甚至零字节数据)IDAT块的PNG是有效的;解码器连接它们的内容以获得zlib数据流。