2012-04-13 63 views
4

我正在使用jpeglib-turbo库在C++中实现jpeg resizer。高性能jpeglib-turbo implmentation能在<100ms内解压/压缩吗?

我已经给出了使用该库的JPEG解压缩和重新压缩的100毫秒的目标。我可以使用推荐的优化设置(记录在jpeglib-turbo usage.txt中)的最佳效果是320ms左右,所以我想知道100ms甚至可能/现实吗?这将解压缩/重新压缩3000x4000像素的图像,大小从6Mb到130Kb。

,我使用了快速减压的代码是:

dinfo.dct_method = JDCT_IFAST; 
    dinfo.do_fancy_upsampling = FALSE; 
    dinfo.two_pass_quantize = FALSE; 
    dinfo.dither_mode = JDITHER_ORDERED; 
    dinfo.scale_num = 1/8; 
+0

出于好奇,你为什么需要它如此之快?对于6MB JPEG,320ms非常快。 – Bojangles 2012-04-13 18:41:41

+1

你还没有提到过一个平台。这是为了移动吗?桌面?单线程还是多线程?我有一些快速的“DCT缩略图”代码,我一直在努力。在我的2GHz Core i7上(使用单线程),它可以在大约120ms内从6兆字节的JPEG数据(4000x4000图像)中提取1/8大小的RGB32图像。要将500x500图像重新压缩到130KB可能需要40-100ms(我还没有对压缩机做过极端优化)。缩略图提取代码的时间关键部分是用64位汇编语言编写的。与我联系获取更多信息([email protected])。 – BitBank 2012-05-08 19:21:44

+2

这个项目是否有开源的机会?发布一个链接:) – kritzikratzi 2012-07-20 12:59:38

回答

4

感谢您的答案。

它实际上有可能在100ms左右解压并重新压缩。在联系libjpeg-turbo的作者后,他告诉我我使用的dinfo.scale_num属性是错误的。此属性是规模分子 - 我还需要设置scale_denom(分母)属性。

因此,好代码如下:

dinfo.dct_method = JDCT_IFAST; 
dinfo.do_fancy_upsampling = FALSE; 
dinfo.two_pass_quantize = FALSE; 
dinfo.dither_mode = JDITHER_ORDERED; 
dinfo.scale_num = 1; 
dinfo.scale_denom = 8; 

我想要的代码,以这么快的图像缩放应该是潜移默化的用户,因为它是在客户端应用程序在速度/用户体验是最重要的事情。

+0

您正在设置'scale_num'两次,猜测其中一个调用应该设置'scale_denom'而不是? – 2012-05-29 11:16:35