2010-04-15 3 views
6

Possiedo un'applicazione in esecuzione su Windows Server 2008, che sta elaborando immagini caricate. Attualmente elabora con successo circa 8000 immagini al giorno, creando 11 diverse dimensioni di ogni immagine.Alcune immagini non vengono caricate su Windows Server 2008

Il problema che ho è che a volte l'applicazione non riesce a caricare alcune immagini, viene visualizzato l'errore "System.Runtime.InteropServices.ExternalException: si è verificato un errore generico in GDI +".

Il caricamento accetta solo file con estensione JPEG (jpg/jpeg/jpe) o con un tipo MIME JPEG e da quello che posso dire che quelle immagini sono in realtà immagini JPEG. Se guardo il file immagine in Windows Explorer sul server, è possibile estrarre la miniatura dal file, ma se provo ad aprirlo, viene visualizzato il messaggio di errore "Questo non è un file bitmap valido o il suo formato è non attualmente supportato. " da Paint.

Se copio l'immagine sul mio computer, con Windows 7, non c'è alcun problema nell'aprire l'immagine. Funziona in Paint, Windows Photo Viewer, Adobe Bridge e Photoshop. Se provo a caricare l'immagine utilizzando Image.FromStream nello stesso modo in cui l'applicazione è in esecuzione sul server, viene caricata correttamente. (Ho copiato il file di nuovo sul server, e ancora non funziona, quindi non c'è nulla nel processo di copia che lo cambia.)

Quando guardo le informazioni dell'immagine in Bridge, vedo che il le immagini vengono create utilizzando Picasa 3.0, ma a parte questo non riesco a vedere nulla di speciale su di loro. Non ho ancora trovato nessuno con lo stesso problema o problemi noti come questo con l'applicazione Picasa.

Qualcuno ha avuto problemi simili o sa se c'è qualcosa di speciale nelle immagini create con Picasa? C'è qualche codec di immagine che deve essere installato sul server per gestire tutti i tipi di immagini JPEG?

Ecco un esempio di un'immagine che non viene caricata sul server: gdi-example.jpg (192 kB).

+0

Interessante. Posso confermarlo usando l'immagine di esempio su Windows Server 2008 e 2003 (sebbene il Picture Viewer mi dia un'immagine di 1 x 1 pixel nel 2003). Non riesco a vedere niente di sbagliato con l'immagine. Su Windows 7, si apre bene. Questa potrebbe essere una patch GDI legata alla sicurezza o qualcosa del genere, ma non ho idea di cosa fare. –

+0

@Pekka: Grazie per averlo confermato, quindi so almeno che il problema è probabilmente correlato alla versione del sistema operativo, e non solo a questo server. – Guffa

risposta

2

Da scambio di esperti, ho ottenuto un esempio utilizzando un oggetto BitmapImage per caricare l'immagine e salvarla in un MemoryStream. BitmapImage può, per qualche motivo, caricare le immagini che l'oggetto Bitmap non può.

Ho anche dovuto caricare i dati dal file e alimentarlo a BitmapImage come MemoryStream, in modo che non bloccasse il file.

Quindi, questo è il codice finale (sans alcuni di registrazione) che uso ora:

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

credo che debba essere qualcosa in informazioni di intestazione EXIF ​​generato da Picasa. Stavo avendo lo stesso problema: l'elaborazione di migliaia di immagini, ma a volte alcuni non vogliono elaborare. Ho usato la soluzione di clonazione qui: How can I get .Net to save this image?