C# 与Microsoft的Jpeg相比,更快的图像压缩/解压缩延迟

C# 与Microsoft的Jpeg相比,更快的图像压缩/解压缩延迟,c#,image,jpeg,latency,C#,Image,Jpeg,Latency,可能有点主观 但这是一个相当直截了当的问题 哪种图像压缩/解压缩速度最快? 我的意思是在c中可用 我自己很确定它是Jpeg格式的 但话说回来,jpeg多年前就一直遵循一个标准,必须遵守某些规则,这样才不会破坏兼容性 所以也许有更好的事情我不知道了 当我说最快时,我指的是延迟和性能 比如说PNG,压缩一个1080p文件需要1秒。 解压需要30毫秒,然后从位图源到第二个位图,将延迟1.030秒 由于许多原因,Jpeg比png快得多,而且解压速度也非常快。和其他许多事情一样,编码器/解码器完成了大部分

可能有点主观

但这是一个相当直截了当的问题

哪种图像压缩/解压缩速度最快? 我的意思是在c中可用

我自己很确定它是Jpeg格式的

但话说回来,jpeg多年前就一直遵循一个标准,必须遵守某些规则,这样才不会破坏兼容性

所以也许有更好的事情我不知道了

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

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

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

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

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

编辑:注意到我以前问过这个问题,但用另一个术语,或者怎么称呼它。虽然现在我写的更具体一些。但我认为它几乎是复制品。
我把它交给你们的版主。

正如你们所说,PNG非常慢。对于10000 x 10000像素的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
是时候再次解压和再压缩了,实际时间是挂钟时间,所以速度大约慢30倍

其中大部分用于放气减压和再压缩。PNG有一个设置压缩级别的选项,0表示无压缩,即关闭“deflate”。它仍然比JPEG慢得多

$ time vips copy wtc0.png x.png[compression=0]
real    0m6.552s
user    0m8.528s
sys 0m0.440s
大约慢7倍,当然,关闭压缩后,文件会大得多。我不知道为什么libpng速度如此之慢,如果有人能制造一个libpng涡轮,那就太好了

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倍。同样,缺点是文件会很大,因为没有压缩

最快的概念是短暂的。相同的压缩,压缩图像不做任何事情,因此不压缩它肯定比任何其他。。。你通常在空间和速度之间进行权衡。是的,确实如此。不知道如何解释我在权衡中寻找的东西。但近乎透明和快速的速度是值得的。即使它比正常情况大一点,只要它不是.bmp.png大小。jpeg编码速度的3个主要方面是1颜色转换、2 DCT变换和3熵编码。如果选择较低的质量级别和较小的输出文件,3将花费较少的时间。无论设置如何,其他两个过程都需要相同的时间。好吧,使用较低的设置,假设1你什么都看不到;会比其他的快1-3%。然而,100的速度非常慢,但是在85的时候,它一直保持不变,直到非常小的设置,而这些设置实际上是不可用的。我想改进其他两个设置。有可能需要访问编码器和解码器以进行自定义设置,当然这会破坏与任何其他解码器的兼容性。但尝试一下会很有趣,因为我不关心Jpeg在全球范围内的兼容性,就在5月份的应用程序中。Deflate和predictor本身速度很慢,几乎不可能完全并行,尽管可以进行权衡。JPEG本质上可扩展到尽可能多的可用核心,并且即使在单核心上也很少记账。这是1995年没人会想到的事情之一。有趣的是,JPEG编解码器是单线程的。它很快,因为它大量使用SIMD向量指令。您可以获得zlib的SIMD版本,例如zlib ng,但它们仍然没有那么快。PNG没有重新启动标记,正如您所说,很遗憾,这会阻止线程。