【问题标题】:Is there some way to predict png size?有什么方法可以预测 png 的大小吗?
【发布时间】:2017-04-11 04:36:54
【问题描述】:

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

【问题讨论】:

标签: compression png clipboard


【解决方案1】:

一张 PNG 图像包含几样东西:

  1. 签名和基本元数据(图像大小和类型)
  2. 调色板(仅当图像被索引时)
  3. 原始像素数据
  4. 可选元数据(辅助块)
  5. 图像块结束

item 1 的大小是固定的:8 + 12 + 11 = 31 bytes

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

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

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

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

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

这是用 ZLIB 压缩的。 bound precisely the worst case 压缩率几乎是不可能的。在实践中,人们可能会假设在最坏的情况下,压缩流将比原始流多几个字节。 那么项目 3 的大小将近似为(再次假设一个相当小的 IDAT 块大小为 8192 字节)由

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

第 4 项(辅助块数据)实际上无法绑定。

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 2020-11-16
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多