.NET中最快的图像大小调整
我需要最快的库来调整全尺寸图像(一些尺寸高达9MB)到多种尺寸 。
这是场景:
- 用户上传照片
- FileSystemWatcher正在服务中运行,观察丢弃位置(在SAN上)
- 当出现新照片时,该服务将以完整的JPEG质量创建4个版本的图像:
- 100px宽
- 320px宽
- 640px宽
- 1280宽
如果库是C / C ++或其他任何东西,我都不会感到困惑,只要我可以通过.NET进入它就很酷。
此外,还需要扩展到可能有1,000个活跃用户。
让我知道你的想法 :)
有很多文章展示了这个的基础知识 。 我使用了Atalasoft的组件,发现它们的质量非常好。 resize和处理JPEG图像有一些细微差别。
您似乎真的关心性能但是您并没有真正提供足够的信息来帮助我们为您提供良好的优化。 无论您在做什么,都需要进行全面的性能分析,并了解运行缓慢的情况。 在某些情况下,如果优化其他内容,则可以减慢但可维护的图像处理代码。
良好性能的一个解决方案是对需要转换的传入文件进行排队。 添加更多计算机以处理队列中的更多消息,或优化服务代码以获得更好的吞吐量。 如果你正确设计,处理大量用户真的并不困难。
这是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类
我推荐ImageResizer :
主要特点是:
- RESTful基于URL的图像API(例如:src =“img.jpg?w = 170”)
- 直观裁剪,resize,旋转,翻转,约束和编码
- 将PDF渲染为图像
- 19个免费插件涵盖了最常见的任务
- 磁盘+内存输入/输出缓存
- 8位PNG / GIF和动画GIF处理
- 灵活的文本和图像叠加支持
- 图像过滤套件(需要许可证)
- 高性能
- 和更多 ….
使用Nuget进行安装:
PM> Install-Package ImageResizer.MvcWebConfig PM> Install-Package ImageResizer.Plugins.DiskCache PM> Install-Package ImageResizer.Plugins.PrettyGifs
有关更多信息,请访问: http : //imageresizing.net/docs/install/nuget
如果钱不是对象,LeadTools是传统的“去”图像处理库。 话虽这么说,我的第一个倾向是使用库存.NET GDI +调用来编码,然后进行一些测试。 这个解决方案可能足够高性能,但如果没有,您将拥有一个基线,您可以从中比较其他库和解决方案。 任何涉及产生命令行工具的事情都需要为每个图像创建一个单独的进程,这可能会抵消转到非托管代码的好处。
我不确定性能,但开源OpenCV是一个选项。
void cvResize(const CvArr * I,CvArr * J,int interpolation = CV_INTER_LINEAR);
函数cvResize调整图像I的大小,使其与J完全匹配。如果设置了ROI,则该函数会像往常一样考虑ROI。 使用指定结构元素B的源图像,该结构元素B确定采用最小值的像素邻域的形状:
- LINQ to Entities无法将方法Generic.List(int)识别为Generic.IEnumerable(int)方法
- 系统常数为一周内的天数(7)
- 任务LongRunning副作用?
- C#中的内存使用情况
- IP地址是否与本地计算机位于同一子网上(支持IPv6)
- 我应该总是在nhibernate中使用事务(即使是简单的读写操作)吗?
- 读取内存映射文件或内存映射视图访问器的所有内容,而不知道它的大小
- 使用LinqExpressions构建MicroRuleEngine
- MemoryStream.WriteTo(Stream destinationStream)与Stream.CopyTo(Stream destinationStream)