我需要最快的库来调整全尺寸图像(一些尺寸高达9MB)到多种尺寸。
这是场景:
如果库是C / C ++或者其他任何东西,我不会感到很生气,只要我能通过.NET进入它就很酷。
此外,还需要扩展到可能有1,000个有效用户。
让我知道你的想法:)。
答案 0 :(得分:7)
这是winforms方式
public Image ResizeImage( Image img, int width, int height )
{
Bitmap b = new Bitmap( width, height ) ;
using(Graphics g = Graphics.FromImage( (Image ) b ))
{
g.DrawImage( img, 0, 0, width, height ) ;
}
return (Image ) b ;
}
这是WPF方式TransformedBitmap Class
答案 1 :(得分:7)
我建议 ImageResizer :
主要功能包括:
使用Nuget进行安装:
PM> Install-Package ImageResizer.MvcWebConfig
PM> Install-Package ImageResizer.Plugins.DiskCache
PM> Install-Package ImageResizer.Plugins.PrettyGifs
有关详细信息,请查看: http://imageresizing.net/docs/install/nuget
答案 2 :(得分:6)
有很多文章显示basics of this。我使用了Atalasoft中的组件,发现它们的质量非常好。调整大小和处理JPEG图像有一些细微差别。
您似乎非常关注性能,但您并没有提供足够的信息来帮助我们为您提供良好的优化建议。无论您在做什么,都需要进行全面的性能分析,并了解运行缓慢的情况。在某些情况下,如果其他事情得到优化,那么缓慢但可维护的图像处理代码可能没问题。
良好性能的一个解决方案是对需要转换的传入文件进行排队。添加更多计算机以处理队列中的更多消息,或优化服务代码以获得更好的吞吐量。如果你的设计得当,那么处理大量用户并不困难。
答案 3 :(得分:2)
如果钱不是对象,LeadTools是传统的“转到”图像处理库。话虽这么说,我的第一个倾向是使用股票.NET GDI +调用来编码,然后进行一些测试。这个解决方案可能足够高性能,但如果没有,您将拥有一个基线,您可以从中比较其他库和解决方案。任何涉及产生命令行工具的事情都需要为每个图像创建一个单独的进程,这可能会抵消转到非托管代码的好处。
答案 4 :(得分:0)
我不确定性能,但open source OpenCV是一个选项。
void cvResize(const CvArr * I,CvArr * J,int interpolation = CV_INTER_LINEAR);
函数cvResize调整图像I的大小,使其与J完全吻合。如果设置了ROI,则该函数会像往常一样考虑ROI。使用指定结构元素B的源图像,该结构元素B确定采用最小值的像素邻域的形状: