有没有办法预测png大小?

时间:2017-04-07 14:03:29

标签: compression png clipboard

我正在实现剪贴板,我想为png图像分配一次内存。有没有办法预测png文件的最大大小?

1 个答案:

答案 0 :(得分:1)

PNG图片包含以下几项内容:

  1. 签名和基本元数据(图像大小和类型)
  2. 调色板(仅在图像编入索引时)
  3. 原始像素数据
  4. 可选元数据(辅助组块)
  5. 图像块结束
  6. 第1项的大小是固定的:8 + 12 + 11 = 31字节

    第2项的大小(如果需要)最多为12 + 3 * 256 = 780字节

    第5项的大小是固定的:12字节

    第3项原始像素数据通常是最重要的数据。已过滤的未压缩数据为

      

    FUD =(W * C * 8 / BPC + 1)* H字节

    其中W =以像素为单位的宽度,H =以像素为单位的高度,C =通道(如果为RGB,则为3,如果为调色板或灰度,则为1,如果为RGB,则为4,如果为GA,则为2),BPC =每通道的位数(通常为8)

    用ZLIB压缩。 bound precisely the worst case压缩率实际上是不可能的。在实践中,可以假设在最坏的情况下,压缩流将比原始流具有更多的字节。 那么第3项的大小将受到约束(再次假设IDAT块大小相当小,为8192字节)

     (FUD + 6)(1 + 12/8192) ~ FUD
    

    项目4(辅助数据块)实际上不可能绑定。