图像压缩和 CPU 用法

Image compression and CPU usage

Android 和一个 Bitmap class 有一个 Compress 方法 (see here).

Compress 有一个 quality parameter。根据文档,压缩为 JPEG 时:

Compress to the JPEG format. quality of 0 means compress for the smallest size. 100 means compress for max visual quality.

我的问题是:使用较高的值(例如 100)会比使用较低的值(例如 50)使用更多 CPU(即需要更长的时间)吗?

我希望答案是“是的,因为做更多的压缩需要更长的时间”......但我真的不知道。

在 Jpeg 中,更高的质量意味着更少的压缩,因此更少 CPU 使用。

更高的质量并不意味着它会使照片更好,这是一种误解。在 Jpeg 中,更高的质量意味着 不要压缩太多并尽可能保持与原始照片接近的质量。压缩会降低当前质量。

接近 100 意味着更少的压缩以保持质量,因此它使用更少的 CPU 时间,因为它需要更少的压缩。 接近 0,意味着更多压缩以换取质量,因此它使用更多 CPU 时间,因为它需要更多压缩。

  • 更多压缩(方向为 0)= 质量较低、文件较小、CPU 使用率较高。
  • 更少压缩(方向为 100)= 更高质量、更大文件大小、更少 CPU 使用。

您需要考虑的是,在 Android 中,Jpeg 压缩是在 C/C++ 中本地实现的,因此非常快。因此 CPU 时间不是一个需要考虑的重要因素,考虑到您应该在后台线程中压缩以获得最佳性能。

此外,在大多数情况下,您应该避免使用 100% 质量,最好是 80% 到 95% 之间的任何值。

100% 质量意味着完全没有压缩(因此质量最好),但因此可能会产生巨大的文件。