为什么在Android上PNG压缩比JPEG慢那么多?

22

我玩了一下 Android Bitmaps,发现 PNG 压缩比最高质量的 JPEG 压缩需要更多的时间,甚至是非常多。在我的设备上,PNG 压缩可能需要约 10 秒钟,而 JPEG 只需要 1 秒钟。

据我所知,PNG 基本上是经过 deflate 压缩的像素过滤字符串。好吧,为每个字符串找到最佳的过滤器可能是一个耗时的任务,但可以在速度和压缩效果之间建立折衷。它不应该比 JPEG 慢得多。它是怎么回事?

也许是反过来的。Android 上有一些超快速的 JPEG 实现吗?

更新:我只是做这样的事情

mBitmap.compress(CompressFormat.JPEG, 100, stream);

并且

mBitmap.compress(CompressFormat.PNG, 100, stream);

1
你应该放一些代码来展示如何压缩。 - Lukas Knuth
25
JPEG可以进行硬件加速,PNG总是在软件中完成。JPEG处理所需的时间是恒定的。编码和解码PNG的90%以上时间都花在了flate编解码器上。滤波只需要很少的时间。以最高质量级别进行deflate压缩需要很长时间,因为它会尝试多种方法来获得最佳压缩效果。 - BitBank
实际上,Skia确实支持JPEG硬件加速。我应该在模拟器上检查我的代码。如果性能差距降低了,那就是这个原因。 - akalenuk
1个回答

6

我已经在模拟器上测试了我的项目,使用更大的图片虽然PNG压缩速度稍微慢了一些,但是性能并没有明显的差异。因此,正如BitBank在评论中所说,这应该是由于硬件加速造成的。


1
顺便说一句,看起来WEBP甚至比这两者都要慢:https://issuetracker.google.com/issues/120109351 - android developer
我怀疑,webp 应该会慢一些。它提供更好的压缩比,所以这是一种权衡。 - akalenuk
1
我认为,随着文件越来越大,与PNG和JPG相比,你会注意到它变得越来越慢。 - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接