Das Speichern von PNG-Bildern in einem Speicherstream verursacht Fehler

9

Ich habe einen WebAPI-Endpunkt (in IIS gehostet), der Bilder aus einer Datenbank (Byte-Array) liest und sie im PNG-Format zurückgibt. Dieser Code ist einfach:

%Vor%

Ich habe drei Webserver und auf einem davon verursacht der obige Code diesen Fehler: A generic error occurred in GDI+. at at System.Drawing.Image.Save() .

Weitere Details zu den Servern

Auf den Servern werden verschiedene Betriebssystemversionen ausgeführt:

  • Server 1 funktioniert einwandfrei: Windows Server 2012 Standard
  • Server 2 funktioniert einwandfrei: Windows Server 2008 R2 Standard
  • Server 3, funktioniert nicht : Windows Server 2012 R2 Datacenter (Core)

JPEG ist ein Workaround

Ich habe den obigen Code geändert, um ein JPEG anstelle eines PNGs zurückzugeben, und behebt das Problem.

%Vor%

Ich muss PNG-Bilder senden, damit ich die Ursache finden muss.

Verwenden von WPF-Klassen anstelle von Windows Form-Klassen

Ich habe den Code konvertiert, um WPF-Klassen (System.Windows.Media) anstelle von Windows Form-Klassen zu verwenden. Das Ergebnis ist interessant: Ich bekomme einen Fehler beim Erstellen von PNGs. Diesmal ist der Fehler The component registration is invalid. (Exception from HRESULT: 0x88982F8A) at System.Windows.Media.Imaging.BitmapEncoder.SaveFrame()

Gibt es etwas auf dem Server?

Könnte es sein, dass auf meinem Server eine Low-Level-Komponente fehlt, die zum Speichern von PNGs erforderlich ist?

Danke

@Chris Pratt bat darum, den Code zu sehen, der die Bilder aus dem Byte-Array erzeugt. Zwischen dem WebAPI-Code und dem SqlDataReader-Aufruf gibt es mehrere Ebenen, aber hier ist der Code, der das aus der Datenbank gelesene Byte-Array konvertiert.

%Vor%     
Sylvain 07.03.2016, 19:35
quelle

1 Antwort

0

1) Das .NET Framework & gt; = 3.0 sollte einen eingebauten Encoder haben. Überprüfen Sie, ob es einen Encoder für den richtigen Bildmime-Typ gibt.

%Vor%

(Sie benötigen eine Suche nach Encodern)

%Vor%

Dann können Sie versuchen, mit Ihrem Lieblings-Encoder zu speichern oder die Bytes

zu bekommen %Vor%

2) Manchmal hatte ich Probleme beim Speichern indizierter Bilder. Sehen Sie sich yourImage.PixelFormat an und versuchen Sie, das Bild gegebenenfalls in ein anderes zu konvertieren.

    
Davide Prenassi 10.03.2016 10:09
quelle