在追踪了几天奇怪的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+中没有的强大的图像处理和转换例程(或者不是在Mono下实现的),并且作为ASP.net图像处理的替代方案享有良好的声誉.

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

Asp.net相关问答推荐

为什么从 ASP.NET Core Web API 的 ControllerBase 与 Controller 派生?

如何在 ASP.Net Core Razor 页面上重定向

ASP.NET Core 中的 Server.MapPath 类似功能是什么?

为什么 aspnet 核心从 Docker 内部的端口 80 启动?

ASP.NET Core 2.0 为同一端点结合了 Cookie 和承载授权

如何在 ASP.NET Core 中更改 Swagger 的基本 url

ASP.NET 核心,更改未经授权的默认重定向

ASP.NET Core 中的 NuGet 包位置在哪里?

如何使用 asp.net Core 更改迁移的输出文件夹?

在 ASP.NET Core 中未经授权时重定向到登录

如何在 ASP.NET Core Web API 中配置 JSON 格式的缩进

ASP.NET Core Web API 身份验证

使用 ConfigurationBuilder 设置基本路径

如何设置asp.net身份cookie过期时间

带有 ASP.NET MVC 6 锚标记助手的 QueryString

Anti-Forgery Token 适用于不同的基于声明的用户

如何从 Web API 应用程序返回 PDF

解析 JSON 响应的最简单方法

“x-powered by”是什么意思?

当前上下文中不存在名称“__o”