【问题标题】:Image manipulation in asp.net/c# without System.Drawing/GDI+没有 System.Drawing/GDI+ 的 asp.net/c# 中的图像处理
【发布时间】:2010-09-06 00:17:13
【问题描述】:

.net 是否有任何替代图像处理库?我更喜欢托管和开源的东西。

我问这个有两个原因:

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

谢谢!

编辑:澄清,我知道 System.Drawing 可以运行 asp.net 网络应用程序 - 我过去曾使用过它。我真的只是想知道.net 是否有任何托管图像处理库:)

【问题讨论】:

  • 托管位图操作本来就很慢。几乎所有可用的东西都是托管包装器,因为需要汇编级优化 (SSE) 来获得快速的 jpeg 编码和解码。我建议你看看the ImageResizing.Net library。它完成了大多数人需要的 99%,并且处理了 GDI 的所有错误和怪癖。还知道如何正确运行具有数百万图像和数百万访问者的网站。

标签: asp.net system.drawing


【解决方案1】:

您应该查看the WPF Imaging libraries shipped with .NET 3.0。它们经过优化且功能强大(用于运行 Aero,因此您知道它们很高效)。它们不依赖于 WPF 调度程序,易于扩展,并得到官方支持。你还想要什么?

【讨论】:

  • 很确定 Aero 无法在 WPF 上运行,因为您无需安装 .NET 即可让 Aero 在 Windows 中运行。
  • 显然 WPF 通过 asp.net 有自己的问题。请参阅 Bertrand Le Roy 的“更新”和 cmets 部分 -- weblogs.asp.net/bleroy/archive/2010/01/21/…
【解决方案2】:

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

Cairo 是一个独立于平台的 2D 绘图 API。您可以在the Cairo homepage 找到有关它的更多信息。 Cairo Wikipedia page 也有一些很好的信息。

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

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

【讨论】:

  • Mono 的 System.Drawing 有点不完整……DrawImage 没有实现许多重载……我正在尝试找到一种解决方法,以便在imageresizing.net 图书馆。
  • 最新版本的Mono支持DrawImage,现在很多操作都可以了。
【解决方案3】:

轶事证据 #1:我使用 GDI+ 在 ASP.NET 中进行动态图像创建,没有任何问题。我不确定甚至会出现什么问题。

【讨论】:

【解决方案4】:

关于 (1),大多数难以调试的错误是由于未关闭打开的句柄(托管区域中的 Dispose())造成的。我很好奇你是从哪里听到的 (2)。

【讨论】:

猜你喜欢
  • 2014-03-16
  • 2014-07-11
  • 2012-09-28
  • 2012-08-14
  • 2012-01-15
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多