2008-08-16 9 views
9

¿Existe alguna biblioteca de manipulación de imágenes alternativa para .net? Preferiría algo que sea administrado y de código abierto.Manipulación de imágenes en asp.net/c# sin System.Drawing/GDI +

te pido esto debido a dos razones:

  1. he encontrado difíciles de depurar errores GDI + con System.Drawing en el pasado
  2. He leído que el uso de System.Drawing en aplicaciones Web ASP.NET no es 100% compatible.

¡Gracias!

editar: aclaración, sé que System.Drawing puede funcionar aplicaciones web asp.net - Lo he usado en el pasado. Realmente me pregunto si hay alguna biblioteca de manipulación de imágenes gestionadas para .net :)

+0

Las operaciones del mapa de bits administrado son inherentemente lentas. Prácticamente todo lo que se pueda utilizar será un contenedor administrado, porque se necesitan optimizaciones de nivel de ensamblaje (SSE) para obtener una rápida codificación y decodificación jpeg. Sugiero que eche un vistazo a [la biblioteca ImageResizing.Net] (http://imageresizing.net). Hace el 99% de lo que la mayoría de la gente necesita, y maneja todos los errores y caprichos de GDI. También se sabe para ejecutar sitios web con millones de imágenes y millones de visitantes. –

Respuesta

2

No conozco ninguna biblioteca de dibujo en 2D completamente administrada que sea gratuita o de código abierto (parece que hay algunas disponibles comercialmente, pero OSS es el camino a seguir). Sin embargo, puede consultar the Mono bindings to Cairo.

Cairo es una API de dibujo 2D independiente de la plataforma. Puede encontrar más información al respecto en the Cairo homepage. El Cairo Wikipedia page también tiene buena información.

El Cairo también se usa ampliamente en el mundo del código abierto, lo que para mí dice algo acerca de su robustez. Mozilla, Webkit y Mono lo usan, entre otros. Irónicamente, Mono realmente lo usa para respaldar su sistema. Dibujar implementación ... vaya figura.

También podría haber una manera de utilizar la implementación de System.Drawing de Mono como un reemplazo directo para la implementación de Microsoft, aunque no estoy seguro de cómo o si eso funcionaría. Probablemente comenzaré reemplazando la referencia de System.Drawing.dll con la versión de Mono, y luego trataré de manejar cualquier error.

+0

Mono System.Drawing está algo incompleto ... DrawImage, for one , no implementa muchas de las sobrecargas ... Estoy tratando de encontrar una solución para poder soportar Mono en la biblioteca http://imageresizing.net. –

+0

La última versión de Mono admite DrawImage, por lo que ahora funcionan muchas operaciones. –

0

Con respecto a (1), la mayoría de los errores difíciles de depurar se deben a no cerrar los identificadores abiertos (Dispose() en un terreno gestionado) Tengo curiosidad por dónde oíste (2).

+1

Microsoft tiene una advertencia en los documentos .NET para (2): http://msdn.microsoft.com/en-us/library/system.drawing.aspx –

1

Evidencia anecdótica # 1: He utilizado GDI + para la creación de imágenes sobre la marcha dentro de ASP.NET sin problemas. No estoy seguro de cuáles serán los problemas.

+0

El espacio de nombres System.Drawing no es compatible, MS lo dice: http://msdn.microsoft.com/en-us/library/system.drawing.aspx Por lo tanto, la posibilidad de encontrar problemas graves definitivamente existe ... – noocyte

4

Debería mirar en the WPF Imaging libraries shipped with .NET 3.0. Están optimizados y son robustos (se usan para ejecutar Aero, para que sepas que son eficientes). No dependen del despachador de WPF, son fácilmente extensibles y oficialmente compatibles. ¿Qué más podrías querer?

+0

Bastante seguro de que Aero no se ejecuta en WPF, ya que no necesita tener .NET instalado para que Aero funcione en Windows. – rossisdead

+0

Aparentemente, WPF tiene problemas propios a través de asp.net. Consulte las secciones de "actualización" y comentarios de Bertrand Le Roy - http://weblogs.asp.net/bleroy/archive/2010/01/21/server-side-resizing-with-wpf-now-with-jpg. aspx – EBarr

Cuestiones relacionadas