第11周NuGet包——ImageResizer让你在ASP.NET中实现干净清晰的图像大小调整
[原文发表地址] NuGet Package of Week #11 - ImageResizer enables clean, clear image resizing in ASP.NET
[原文发表时间] 2011-10-31 23:57
背景故事:既然NuGet .NET包管理网站已经开始建立了,我就想应该在那寻找一些宝贝了。否则大家无法找到真正有用的东西。我会找大多开放源项目,那些我认为有用的东西。我会看看他们是怎么建立他们的NuGet包的,其中是不是有什么很有趣的盒外设计方法(或者可以改进的东西),还有那些包可以实现什么。今天,我要说的就是ImageResizer。
Bertrand Le Roy一直倡导在.NET上正确地调整图像大小,尤其是在ASP.NET上。上周,他发表了一篇有关新库的选择方案的博文,这个库是完全的.NET风格,只需中等信任。这就是“imageresizer”。多有创意的名字啊!
说真的,这不简单。以下是Bertrand博客中的很棒的例子,展示了如何直接使用imageresizer以流字节方式来调整JPEG大小。
1: var settings = new ResizeSettings {
2: MaxWidth = thumbnailSize,
3: MaxHeight = thumbnailSize,
4: Format = "jpg"
5: };
6: settings.Add("quality", quality.ToString());
7: ImageBuilder.Current.Build(inStream, outStream, settings);
8: resized = outStream.ToArray();
这是一个完整的并很灵活的API。不过,从文件新项目到最终实现效果到底有多快呢?
创建一个全新的ASP.NET(MVC或者WebForm)项目,在文件夹中放入一个图像。
他们默认的NuGet包被称作ImageResizer,而他们的ASP.NET预配置web.config包则是“ImageResizer.WebConfig”,包括了默认拦截模式。我使用NuGet来安装imageresizer.webconfig。
我正好有一个我的巨型头像,可以在任何浏览器中访问。
现在使用安装了拦截Http模式(intercepting HttpModule)的imageresizer.webconfig,我可以在查询字符串后加上?width=100,这样我就有了大小调整后的图像,能够适应任何“100宽度”的地方。这是个微不足道的例子,不过是个很好的尝试,让他们“计算出这个该有多高”。
当然,你可以用DoS(拒绝服务)来调整大小的请求,不过对于小网页,它们的拦截模式能快速修复,是个很棒的例子。DoS问题不局限于CPU密集型请求和其他地方解决的问题。
更新:请阅读以下作者的评论。他指出了一些正确和有效的东西。
我想澄清它不仅仅可以用于小网页,它在大型社交网页上已运行多年了,而且至少有6个公司将它和10-20TB图像集合器一起使用(它能驱动图片相册系统)。它就是为web,Amazon EC2 clusters 设计的,甚至还包括Microsoft Azure。
“性能优化,它的速度可以和GDI相媲美(尽管Bertrand的文章,他很快就会更新的)。默认行为可以支持高性能(在最差的设置下,最多也只有40%的差别),但是那样是可以调整的。”
他在邮件中也告诉我:
“所有的裁剪,翻转,旋转和格式转换都可以从URL语法处完成,在托管应用程序里可以做到的,在URL里也可以做到。”
对于更多复杂的使用,它们支持独立API dll,你可以做更多裁剪,旋转,翻转,水印甚至装换。Bertrand有一个图表展示它们的速度问题,由于它们比GDI和Windows Imaging组件慢了点,但正如我所说,它们是纯管理代码内容,在中等信任环境下就能工作,这是它的优点。同样质量也好是一流的。
ImageResizer还包含了插件支持,可以购买到。太棒了,说真的,我要向它们致敬。最受欢迎和最有用的功能都是免费的,而且方便使用。如果你想做更多,你可以为了高性能购买如DiskCach插件,或者为支持Amazon或者Azure购买S3Reader 和AzureReader,还有其他很多404处理,DropShadow的免费插件。很完整。真的要为Nathanael Jones和团队喝彩,能够完美地使用ASP.NET,.NET,NuGet以及有盈利插件模式的智能开源库。
相关链接
· Bertrand的博客
· 最快地从ASP.NET中调整图像大小的方法,支持性能更强
· Nathanael的博客