1

可能有点主观。

但很直接的问题。

什么是最快的图像压缩/解压缩(两者一起)?我的意思是在 c# 中可用。

我很确定自己是 Jpeg。

但是话又说回来,jpeg 多年来一直遵循标准,并且必须遵守某些规则,以免破坏兼容性。

所以也许有更好的东西我不知道?

当我说最快时,我指的是延迟和性能。

这意味着,比如说,PNG,压缩一个 1080p 的文件,需要 1 秒。解压缩需要 30 毫秒,然后从位图源到第二个位图,这将是 1.030 秒的延迟。

由于许多原因,Jpeg 比 png 快很多,而且它的解压缩速度也非常快。和许多其他事情一样,编码器/解码器完成了大部分工作,这意味着即使标准本身可以产生更好的结果,一个糟糕的编码器也会产生更差的结果。

我目前仅限于内置的 jpeg 编码器/解码器,因为我还没有完全掌握如何从其他编码器/解码器(libjpeg 等)进行 P/调用,但这与此无关。

所以希望这是一个有效的问题,尽管我认为它可能处于边缘。

编辑:注意到我之前曾问过这个问题,但用另一个术语或叫什么名字。虽然现在我已经写得更具体了。但我认为它几乎是重复的。我把它交给版主。

4

1 回答 1

1

正如您所说,PNG 非常慢。对于 10,000 x 10,000 像素的 RGB 图像,我看到:

$ time vips copy wtc.jpg x.jpg
real    0m0.915s
user    0m1.652s
sys 0m0.052s
$ time vips copy wtc.png x.png
real    0m28.808s
user    0m32.448s
sys 0m0.272s

那是解压缩和重新压缩的时间,real是挂钟时间,所以它慢了大约 30 倍。

其中大部分用于 Deflate 解压缩和重新压缩。PNG有一个设置压缩级别的选项,0表示不压缩,即。放气关闭。它仍然比JPEG慢得多。

$ time vips copy wtc0.png x.png[compression=0]
real    0m6.552s
user    0m8.528s
sys 0m0.440s

大约慢 7 倍,当然,关闭压缩后文件会大得多。我不知道为什么 libpng 如此缓慢,如果有人可以制作 libpng-turbo,那就太好了。

TIFF 可能是最快的广泛使用的格式。我懂了:

$ time vips copy wtc.tif x.tif 
real    0m0.637s
user    0m0.432s
sys 0m0.344s

所以大约比 JPEG 快 50%,尽管由于图像未压缩,磁盘上的文件也会大得多。

像 PPM 这样的格式甚至更快。它们是图像数据的简单转储,带有提供尺寸的小标题。我懂了:

$ time vips copy wtc.ppm x.ppm
real    0m0.336s
user    0m0.196s
sys 0m0.296s

所以几乎比 JPEG 快 3 倍。同样,缺点是文件会很大,因为没有压缩。

于 2015-07-26T10:44:36.130 回答