【问题标题】:Calculate / Estimate the compressed file size without performing compression计算/估计压缩文件大小而不执行压缩
【发布时间】:2022-04-17 15:03:38
【问题描述】:

我想计算/估计在使用 Encoder.Quality 值进行压缩后图像 (.jpg) 的文件大小。 这里我不应该在估计之前进行任何压缩,有什么公式可以做到吗?

有没有粗略的估计。我想在不进行迭代压缩的情况下将图像文件大小减小到

是否有基于图像(jpg)宽度、高度和深度(dpi)等的Encoder.Quality值估计...

提前致谢。

【问题讨论】:

  • 我认为进行迭代压缩比任何其他计算/估计都要快。但是,您应该压缩到内存,而不是将文件写入磁盘。
  • 不可能回答 - 你甚至没有提到算法是。然而,除了最低效的算法之外,压缩率取决于数据并且无法计算。您只能根据算法、内容类型(例如剪贴画、照片)和质量水平进行猜测
  • 我访问了链接*.com/questions/2094064/…

标签: c# image image-compression


【解决方案1】:

最终,在您进行实际压缩之前,您无法知道。

另一方面,(香农)数据熵通常是对压缩文件比特率的良好估计。为了获得最佳精度,您需要计算数据的离散余弦变换 (DCT) 并应用与您想要使用的质量 Q 相对应的量化。但是,您也可以尝试在原始域中应用量化,然后计算熵。您还可以尝试评估图像的一部分并将压缩比特率外推到整个图像。

最后,如果您要压缩的图像类型或多或少是同质的(即,您获得的大多数图像的压缩率相似),您可以建立一个查找表来获得您的估计。如果您的图像不是同质的,您还可以尝试对图像进行分类(也许也基于熵?)并为每个类使用不同的查找表。

【讨论】:

  • 我同意没有准确的估计,但我的目的是找到至少粗略的估计。
  • 你有两个(可能是粗略的)估计器:一个基于熵,一个基于平均压缩大小。如果您在计算熵方面需要帮助,可以在线获得一些灵感(例如,csharpprogramming.tips/2013/07/Data-Entropy.html)。
最近更新 更多