在追踪了几天奇怪的GDI+错误后,我在MSDN上偶然发现了这个小Ruby :

系统中的类.Windows或ASP中不支持使用图形命名空间.网络服务.试图在这些应用程序类型中使用这些类可能会产生意想不到的问题,例如服务性能降低和运行时异常.

我不知道在此上下文中"ASP.NET服务"是否意味着"Web应用程序",但"降低的服务性能"似乎肯定涵盖了我的应用程序抛出的随机类别的"A Generic Error Of in GDI+"和"Out Out Memory"错误-读写JPEG图像时出现间歇性的、不可重现的错误,在许多情况下,这些错误实际上是由System.Drawing.Image首先创建的.

So - if GDI+ can't read and write JPEG files reliably in a Web app, what should I be using instead?

我希望用户能够上传图像(需要JPEG,其他格式很好),重新采样它们reliably,并显示有用的错误消息,如果有什么问题.有什么主意吗?来自WPF的System.Media命名空间值得考虑吗?

EDIT:是的,我知道GDI+在"大部分时间"都有效.这还不够好,因为当它失败时,它以一种不可能优雅地孤立或恢复的方式进行.我对适合你的GDI+代码示例不感兴趣:我在找alternative libraries to use for image processing.

推荐答案

有一篇很好的博文,包括关于在at TopTen Software Blog上通过互操作使用ImageMagick graphics library的C#代码.这篇文章专门讨论运行ASP.net平台下的linux;然而,C#代码应该是完全可复制粘贴的,如果在windows下运行时引用了窗口二进制文件(DLL),则只需更改互操作属性.

ImageMagick®是一个用于创建、编辑、合成或转换的软件套件

codeplex上还有一个ImageMagick .Net development project,可以为您包装一切.但自2009年以来,它没有显示出积极的发展,因此它可能落后于当前的ImageMagick库版本.对于一个小的调整大小的例行程序,我可能会坚持使用互操作.您只需要仔细观察自己的实现,以防内存泄漏或未发布的资源(库本身经过社区的良好测试和审查).

该库是免费的,并且是开源的.Apache2许可证似乎既与个人目的兼容,也与商业目的兼容.请参见ImageMagick License Page.

该库完全是跨平台的,实现了许多GDI+中没有的强大的图像处理和转换 routine (或者不是在Mono下实现的),并且作为ASP.net图像处理的替代方案享有良好的声誉.

更新:看起来有一个更新版本的.这里的净包装:http://magick.codeplex.com/

Asp.net相关问答推荐

是否可以发布 ASP.NET 5 应用程序以使目标机器不需要安装 DNX?

使用 Asp.Net MVC 和 KnockoutJS 处理日期

指定的 CGI 应用程序遇到错误,服务器终止了进程

如何使用 SmtpClient.SendAsync 发送带有附件的邮箱?

我应该使用字节还是整数?

ASP.NET 平台是否有与 Heroku 等价的工具?

Response.Redirect 使用 ~ 路径

HttpWebRequest 未通过凭据

我需要更改什么以允许我的 IIS7 ASP.Net 3.5 应用程序创建事件源并将事件记录到 Windows EventLog?

HttpModules 的执行顺序是如何确定的?

如何在 C# 中转换 TryCast?

在asp.net mvc 3中实现FilterAttribute,IActionFilter和从ActionFilterAttribute继承有什么区别?

在 ASP.NET MVC 中使用 Razor 创建可重用的 HTML 视图组件

带有 ASP.NET WebMethod 的 Jquery AJAX 返回整个页面

C# 7 本地函数未按预期工作且未显示错误

如何将表从存储过程检索到数据表?

如何将参数传递给 ASP.NET MVC 2 中的自定义 ActionFilter?

如何遍历自定义 vb.net 对象的每个属性?

为什么 Controls 集合不提供所有 IEnumerable 方法?

静态变量是线程安全的吗? C#