2010-04-15 16 views
6

Tengo una aplicación ejecutándose en Windows Server 2008, que está procesando imágenes cargadas. Actualmente procesa con éxito alrededor de 8000 imágenes por día, creando 11 tamaños diferentes de cada imagen.Algunas imágenes no se pueden cargar en Windows Server 2008

El problema que tengo es que a veces la aplicación no puede cargar algunas imágenes, obtengo el error "System.Runtime.InteropServices.ExternalException: Se ha producido un error genérico en GDI +.".

La carga solo acepta archivos con una extensión JPEG (jpg/jpeg/jpe) o con un tipo JPEG MIME, y por lo que puedo decir esas imágenes son realmente JPEG. Si miro el archivo de imagen en el explorador de Windows en el servidor, puede extraer la miniatura del archivo, pero si intento abrirlo, aparece el mensaje de error "Este no es un archivo de mapa de bits válido, o su formato es no soportado actualmente ". de Paint.

Si copio la imagen en mi computadora, ejecutando Windows 7, no hay ningún problema para abrir la imagen. Funciona en Paint, Windows Photo Viewer, Adobe Bridge y Photoshop. Si intento cargar la imagen usando Image.FromStream de la misma manera que en la aplicación que se ejecuta en el servidor, se carga perfectamente. (He copiado el archivo nuevamente al servidor, y todavía no funciona, por lo que no hay nada en el proceso de copia que lo modifique).

Cuando miro la información de la imagen en Bridge, veo que las imágenes se crean usando Picasa 3.0, pero aparte de eso, no puedo ver nada especial sobre ellas. Todavía no he encontrado a nadie que tenga el mismo problema o problemas conocidos como este con la aplicación Picasa.

¿Alguien ha tenido algún problema similar o sabe si hay algo especial sobre las imágenes creadas con Picasa? ¿Hay algún códec de imagen que necesite instalarse en el servidor para manejar todo tipo de imágenes JPEG?

Aquí hay un ejemplo de una imagen que no se carga en el servidor: gdi-example.jpg (192 kB).

+0

Interesante. Puedo confirmarlo usando su imagen de ejemplo en Windows Server 2008 y 2003 (aunque el Picture Viewer me da una imagen de 1x1 píxeles en 2003). No se puede ver nada mal con la imagen. En Windows 7, se abre bien. Puede tratarse de un parche de GDI relacionado con la seguridad o algo así, pero no tengo idea de qué hacer. –

+0

@Pekka: gracias por confirmarlo, entonces sé al menos que el problema probablemente esté relacionado con la versión del sistema operativo y no solo con este servidor. – Guffa

Respuesta

2

De intercambio de Expertos Obtuve un ejemplo usando un objeto BitmapImage para cargar la imagen y volver a guardarla en un MemoryStream. El BitmapImage puede, por alguna razón, cargar las imágenes que el objeto Bitmap no puede.

También tuve que cargar los datos del archivo y alimentarlo a BitmapImage como un MemoryStream, para que no bloqueara el archivo.

Por lo tanto, este es el código final (sans algunos de registro) que utilizo ahora:

using WpfImaging = System.Windows.Media.Imaging; 
... 

byte[] data = File.ReadAllBytes(FileName); 

Image master; 
using (MemoryStream source = new MemoryStream(data)) { 
    var img = new WpfImaging.BitmapImage(); 
    img.BeginInit(); 
    img.StreamSource = source; 
    img.EndInit(); 
    WpfImaging.BmpBitmapEncoder encoder = new WpfImaging.BmpBitmapEncoder(); 
    using (MemoryStream m = new MemoryStream()) { 
    encoder.Frames.Add(WpfImaging.BitmapFrame.Create(img)); 
    encoder.Save(m); 
    master = new Bitmap(m); 
    } 
} 
0

Creo que debe haber algo en la información de la cabecera EXIF ​​generada por Picasa. Estaba teniendo el mismo problema: procesar miles de imágenes, pero algunas veces no quiero procesarlas. Usé la solución de clonación aquí: How can I get .Net to save this image?

Cuestiones relacionadas