第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。不过,从文件新项目到最终实现效果到底有多快呢?

clip_image002

创建一个全新的ASP.NET(MVC或者WebForm)项目,在文件夹中放入一个图像。

他们默认的NuGet包被称作ImageResizer,而他们的ASP.NET预配置web.config包则是“ImageResizer.WebConfig”,包括了默认拦截模式。我使用NuGet来安装imageresizer.webconfig。

我正好有一个我的巨型头像,可以在任何浏览器中访问。

clip_image004

现在使用安装了拦截Http模式(intercepting HttpModule)的imageresizer.webconfig,我可以在查询字符串后加上?width=100,这样我就有了大小调整后的图像,能够适应任何“100宽度”的地方。这是个微不足道的例子,不过是个很好的尝试,让他们“计算出这个该有多高”。

clip_image006

当然,你可以用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的博客

· 用WPF实现服务器端图像大小调整:现在可用JPG

· 使用WPF、WIC替代GDI+从服务器调整图像大小

· 最快地从ASP.NET中调整图像大小的方法,支持性能更强

· Nathanael的博客

· 20个图像大小调整陷阱