最快的C / C ++图像大小调整库
我正在编写一个需要调整大量图像的应用程序…这些是我的要求:
- C / C ++
- 至少支持jpeg / png
- 快速
- 跨平台
到目前为止,我的选择是:
- OpenCV的
- CIMG
- ImageMagick的
- GraphicsMagick(据说速度很快)
- 魔鬼
- 来自Boost的GIL
- CxImage的
- Imlib2(据说很快)
- 还有其他人?
所有这些都可以完成工作,但我在这里寻找最快 ,我无法找到他们的表现任何基准。
看看英特尔IPP(集成性能基元) (Wiki链接比英特尔链接更好…)它也适用于AMD,并具有调整图像大小(双线性,最近邻等)的function,适用于Linux和Windows。
它不是免费的(但它不会破坏银行),但它是你能找到的最快的。
看看VIPS。 这是迄今为止我发现的最快的一个。
如果IPP能够满足你的需求 (例如12节中的函数resize),那么我怀疑你会在其他任何地方找到更快的x86代码。 请记住,当在AMD CPU上运行时,它可能会回落到较慢的“参考实现”。
如果CPU不能满足您的性能要求,您可以考虑使用OpenGL将resize推进到GPU(使用纹理映射的最简单实现将受益于硬件插值器,对于更复杂的过滤使用GLSL着色器代码)。 GPU执行此类操作的速度比CPU快一百倍(给予或取零)的能力必须与进出卡的相对较慢的数据传输进行权衡(通常为每秒一千兆字节或两千兆字节)至多,最多)。
@Chris Becke的评论:
“想一下这个陈述。在一个(复杂的)步骤中做什么部分会让它变得更快?图像解码程序仍然需要解码每个像素,以便过滤程序过滤它们。 “
情况并非总是如此。 例如,当解码JPEG时,你可以要求JPEG库给你一个1 / 2,1 / 4,1 / 8大小的图像(或类似的东西;它已经有一段时间了,因为我仔细查看)它可以由于JPEG的工作方式,所以无需解码额外的细节。 它可以比完全解码+规模快得多。
(显然,如果较小的图像不是您想要的确切尺寸,您可能需要稍后缩放。)
(对不起,由于没有声明,我只能将此回复发表评论。我第一次尝试在此处发布任何内容。如果有人想重新发布此类或类似评论的内容并删除我的答案,请随意!)
如果你正在寻找免费的东西,并希望快速做事,尝试开发一个Gimp C编译的插件:这很容易,我认为Gimp在resize方面做得很好:
这可能不是resize最快,但最便宜(免费)和最快的开发 。
看看那里 。
如果您正在寻找开源,FreeImage怎么样? 对于商业用途,我使用Snowbound。 两者都非常快,能够使用许多不同的图像格式和resize算法。