有没有人知道一个免费的开源JPEG编码库适用于C/C++?目前我正在使用ImageMagick,它很容易使用,但速度比较慢。我将它与Intel Performance Primitives评估进行了比较,并且IPP的速度非常快。不幸的是,它也需要花费200美元,而我只需要其中的1%。此外,它只能在Intel上快速运行。
有人做过什么测试吗?还有其他比ImageMagick更快的好库吗?
编辑:我正在使用8位版本的ImageMagick,应该会更快。
有没有人知道一个免费的开源JPEG编码库适用于C/C++?目前我正在使用ImageMagick,它很容易使用,但速度比较慢。我将它与Intel Performance Primitives评估进行了比较,并且IPP的速度非常快。不幸的是,它也需要花费200美元,而我只需要其中的1%。此外,它只能在Intel上快速运行。
有人做过什么测试吗?还有其他比ImageMagick更快的好库吗?
编辑:我正在使用8位版本的ImageMagick,应该会更快。
请查看TigerVNC主干中的libjpeg/SIMD(http://www.tigervnc.com)。我们已经优化了64位和32位版本,几乎可以与IPP一样快地压缩/解压基线JPEG:
http://www.mail-archive.com/tigervnc-devel@lists.sourceforge.net/msg00403.html
我相信 Boost 中的 GIL 库包含一种将图像数据保存为 JPEG 格式的方法。我不知道它的速度如何,但考虑到该库是由 Adobe 赞助的,我认为做得非常好。
AMD提供Framewave,这是一个开源的IPP替代品。
ImageMagick使用libjpeg(也称为独立JPEG组库)。如果您改进了libjpeg的速度,ImageMagick JPEG的速度将会提高。
有几个选项:
-O3 -msse2
并查看是否可以提高速度。然后,您可以使用LD_LIBRARY_PATH
或其他一些方法加载您的libjpeg而不是系统的libjpeg。我对512x512的jpeg图像进行了一些时间编码,使用了100%的质量(我知道100%不是无损的)。基本上,ImageMagick只比libjpeg稍微慢一点。对于100张图片,差异大约在十分之一秒左右。然后我得到了带有SIMD扩展的libjpeg(http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/jpegsimd.html#source),速度快了6-10倍。请注意,这实际上取决于图像的类型。黑色很多的图像非常快,到处都是细节的图像非常慢 - 我认为这是编码算法的问题。我可能需要尝试一下libjpeg-mmx,因为它看起来比我得到的日本版本更受关注,而且我甚至不知道许可证是什么。
我还尝试过让Framewave工作,但甚至无法启动它。头文件缺少某些结构的定义,论坛提供的支持绝对没有任何帮助。我简直不敢相信它是“由AMD赞助”的。
如果你四处寻找,可能会找到旧版本的英特尔JPEG库。它不是开源的,但速度很快。它足够快,可以在733MHz的P-III上获得25fps。