2008-08-16 5 views
9

Gibt es eine alternative Bildmanipulationsbibliothek für .net? Ich würde etwas bevorzugen, das verwaltet und Open Source ist.Bildbearbeitung in asp.net/c# ohne System.Drawing/GDI +

Ich frage dies aus zwei Gründen:

  1. Ich habe schwer zu debuggen GDI + Fehler mit System.Drawing in der Vergangenheit
  2. Ich habe festgestellt, dass System.Drawing in asp.net Webanwendungen mit wird nicht zu 100% unterstützt.

Vielen Dank!

edit: Klarstellung, ich weiß, dass System.Drawing asp.net Web-Anwendungen funktionieren kann - ich habe es in der Vergangenheit verwendet. Ich frage mich wirklich, ob es verwaltete Bildmanipulationsbibliotheken für .net gibt.

+0

Verwaltete Bitmap-Vorgänge sind inhärent langsam. So ziemlich alles Nützliche wird ein managed Wrapper sein, weil Assembly-Level-Optimierungen (SSE) benötigt werden, um eine schnelle JPEG-Codierung und -Dekodierung zu erhalten. Ich schlage vor, dass Sie sich die [ImageResizing.Net-Bibliothek] (http://imageresizing.net) ansehen. Es macht 99% dessen, was die meisten Leute brauchen, und es behandelt alle Fehler und Macken von GDI. Es ist auch bekannt, Websites mit Millionen von Bildern und Millionen von Besuchern ordnungsgemäß zu betreiben. –

Antwort

2

Ich kenne keine vollverwalteten 2D-Zeichnungsbibliotheken, die entweder frei oder Open-Source sind (es scheint, dass ein paar im Handel erhältlich sind, aber OSS ist der Weg zu gehen). Sie können jedoch in the Mono bindings to Cairo suchen.

Cairo ist eine plattformunabhängige 2D-Zeichnungs-API. Sie können weitere Informationen darüber unter the Cairo homepage finden. Die Cairo Wikipedia page hat auch einige gute Informationen.

Kairo wird auch in der Open-Source-Welt ziemlich weit verbreitet, was für mich etwas über seine Robustheit aussagt. Mozilla, Webkit und Mono nutzen es unter anderem. Ironisch verwendet Mono es tatsächlich, um ihre System.Drawing-Implementierung zu sichern ... gehen Sie Zahl.

Es könnte auch eine Möglichkeit geben, Monos System.Drawing-Implementierung als Drop-In-Ersatz für die Microsoft-Implementierung zu verwenden, obwohl ich mir nicht sicher bin, wie oder ob das überhaupt funktionieren würde. Ich würde wahrscheinlich beginnen, indem Sie die System.Drawing.dll-Referenz durch Monos Version ersetzen und dann versuchen, mit irgendwelchen Fehlern umzugehen.

+0

Monos System.Drawing ist irgendwie unvollständig ... DrawImage, für einen , implementiert nicht viele der Überladungen ... Ich versuche, einen Workaround zu finden, so dass ich Mono in der http://imageresizing.net-Bibliothek unterstützen kann. –

+0

Die neueste Version von Mono unterstützt DrawImage, so viele Operationen funktionieren jetzt. –

0

In Bezug auf (1) sind die meisten der schwer zu debuggen Fehler, offene Handles nicht zu schließen (Dispose() in Managed-Land). Ich bin gespannt, wo du gehört hast (2).

+1

Microsoft hat eine Warnung in der .NET-Dokumentation für (2): http://msdn.microsoft.com/en-us/library/system.drawing.aspx –

1

Anekdotische Beweise # 1: Ich habe GDI + für die On-The-Fly-Erstellung von Bildern innerhalb von ASP.NET ohne Probleme verwendet. Ich bin mir nicht sicher, was die Probleme wären.

+0

Der System.Drawing-Namespace wird nicht unterstützt, MS sagt so: http://msdn.microsoft.com/en-us/library/system.drawing.aspx So ist die Chance auf ernsthafte Probleme zu finden ist definitiv .. – noocyte

4

Sie sollten in the WPF Imaging libraries shipped with .NET 3.0 suchen. Sie sind optimiert und robust (um Aero zu betreiben, damit Sie wissen, dass sie effizient sind). Sie hängen nicht vom WPF-Dispatcher ab, sind leicht erweiterbar und werden offiziell unterstützt. Was willst du mehr?

+0

Ziemlich sicher, dass Aero nicht auf WPF ausgeführt wird, da .NET nicht installiert werden muss, damit Aero in Windows funktioniert. – rossisdead

+0

Anscheinend hat WPF Probleme über asp.net. Siehe die Abschnitte "update" und Kommentare von Bertrand Le Roy - http://weblogs.asp.net/bleroy/archive/2010/01/21/server-side-resizing-with-wpf-now-with-jpg. aspx – EBarr