在没有 System.Drawing/GDI+ 的情况下在 asp.net/c# 中进行图像处理

Image manipulation in asp.net/c# without System.Drawing/GDI+

提问人:Mike 提问时间:8/17/2008 最后编辑:Mike 更新时间:12/20/2008 访问量:6798

问:

有没有适用于 .net 的替代图像处理库?我更喜欢托管和开源的东西。

我问这个问题有两个原因:

  1. 我过去遇到过难以调试的 System.Drawing GDI+ 错误
  2. 我读到在 Web 应用程序中使用 System.Drawing 不是 100% 支持的 asp.net。

谢谢!

编辑:澄清一下,我知道 System.Drawing 可以 asp.net Web 应用程序工作 - 我过去使用过它。我真的只是想知道是否有任何适用于 .net :) 的托管图像处理库

asp.net system.drawing

评论

0赞 Lilith River 10/24/2011
托管位图操作本身就很慢。几乎所有可用的包装器都是托管包装器,因为需要程序集级优化 (SSE) 才能获得快速的 jpeg 编码和解码。我建议你看看 ImageResizing.Net 图书馆。它完成了大多数人需要的 99%,并且可以处理 GDI 的所有错误和怪癖。众所周知,正确运行具有数百万张图像和数百万访问者的网站。

答:

0赞 Nick 8/17/2008 #1

关于(1),大多数难以调试的错误是由于没有关闭打开的句柄(托管土地中的Dispose())。我很好奇你从哪里听说的(2)。

评论

1赞 Morten Mertner 4/24/2012
Microsoft 在 .NET 文档中对 (2) 有警告:msdn.microsoft.com/en-us/library/system.drawing.aspx
1赞 Chris Farmer 8/17/2008 #2

轶事证据 #1:我在 ASP.NET 内使用 GDI+ 进行即时图像创建,没有任何问题。我不确定问题会是什么。

评论

0赞 noocyte 9/20/2012
不支持 System.Drawing 命名空间,MS 是这样说的: msdn.microsoft.com/en-us/library/system.drawing.aspx 所以遇到严重问题的机会肯定是存在的。
2赞 user22467 9/26/2008 #3

我不知道有任何完全托管的 2D 绘图库是免费的或开源的(似乎有一些商业上可用的,但 OSS 是要走的路)。但是,您可以查看 Mono 与 Cairo 的绑定

Cairo 是一个独立于平台的 2D 绘图 API。您可以在开罗主页上找到有关它的更多信息。开罗维基百科页面也有一些很好的信息。

Cairo 在开源世界中也被广泛使用,这在我看来说明了它的健壮性。Mozilla、Webkit 和 Mono 都使用它。具有讽刺意味的是,Mono 实际上用它来支持他们的 System.Drawing 实现......去想想。

可能还有一种方法可以使用Mono的System.Drawing实现作为Microsoft实现的直接替代品,尽管我不确定如何或是否有效。我可能会首先将System.Drawing.dll引用替换为Mono的版本,然后尝试处理任何错误。

评论

0赞 Lilith River 5/25/2011
Mono 的 System.Drawing 有点不完整......例如,DrawImage 没有实现许多重载......我正在尝试找到一种解决方法,以便我可以在 imageresizing.net 库中支持 Mono。
0赞 Lilith River 7/31/2013
最新版本的 Mono 支持 DrawImage,因此现在许多操作都可以使用。
4赞 Frank Krueger 12/20/2008 #4

应查看 .NET 3.0 附带的 WPF 映像库。它们经过优化且健壮(用于运行 Aero,因此您知道它们很高效)。它们不依赖于 WPF 调度程序,易于扩展,并得到官方支持。你还想要什么?

评论

0赞 rossisdead 3/30/2012
可以肯定的是,Aero 不会在 WPF 上运行,因为您不需要安装 .NET 即可让 Aero 在 Windows 中工作。
0赞 EBarr 12/18/2012
显然,WPF 在 asp.net 方面有自己的问题。请参阅Bertrand Le Roy的“更新”和评论部分 - weblogs.asp.net/bleroy/archive/2010/01/21/...