【问题标题】:Compression: Saving JPEG image at specified bit rate in Java / Scala压缩:在 Java / Scala 中以指定的比特率保存 JPEG 图像
【发布时间】:2012-06-07 06:31:04
【问题描述】:

我有兴趣保存 JPEG 图像,以便我可以指定用于以压缩形式对所有像素进行编码的总位数。例如,如果我有一个大小为 1024 x 1024 的 4 通道图像,则对未压缩的位进行编码将需要 4 * 8 * 1024 * 1024 位。使用压缩,可以使用显着更少的位。我想指定压缩形式的位数。

迭代解决方案是对 JPEG 压缩质量参数进行二分搜索。我希望在 Java 或 Scala 中有一个直接的解决方案。

【问题讨论】:

  • 不会发生,因为在实际尝试完全压缩之前,您不会知道结果是什么(这就是有损压缩的本质)。您可以粗略估计一下,但没有“使其 x 字节变大”的调用。二进制搜索与您将要做的一样好。
  • @Chris 这也是我的看法。我认为您应该将您的评论转化为答案。
  • @paradigmatic 作为我的一项规则,除非我真正回答所提出的问题,否则我不会发布任何内容作为答案。在这种情况下,OP 明确指出比二分搜索更好的东西是可取的,所以我不认为我真的在回答任何问题。
  • @Chris 这不是有损压缩的本质。有一些有损压缩方案可以非常直接地估计结果大小——比如减少位深度。还有一些无损压缩方案不允许估计结果大小(如 zip 和 png)。但我认为确实每个体面的压缩都有不同的压缩比,具体取决于内容(具有固定质量)。虽然一些压缩器允许指定目标比特率,但它们试图通过改变质量来满足这一目标。

标签: java scala compression jpeg


【解决方案1】:

正如@Chris 所说,JPEG 没有捷径可走。但是 - 我意识到这是一个很长的镜头 - 如果您愿意使用 JPEG2000 而不是 JPEG,则可以直接指定压缩率。如果您查看此JJ2000 library 中的Encoder 类,您将了解如何修复编码图像的比特率。

不幸的是,由于 JPEG2000 的支持远没有 JPEG 广泛,我担心这对您可能没有多大用处。

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2014-01-18
    • 2011-03-29
    • 2013-01-23
    相关资源
    最近更新 更多