2016-07-26 11 views
0

Ich habe eine Web-API, die Bilder (es kann jpeg oder png sein) aus einem Ordner und konvertiert es in Byte-Array und senden an die aufrufende Anwendung.Beschränken Sie die Image-Byte-Array-Konvertierung in PNG-Format

Ich benutze die unten Funktion, um die Bilder zu binär konvertieren:

public static byte[] ImageToBinary(string imagePath) 
{ 
    FileStream fS = new FileStream(imagePath, FileMode.Open, FileAccess.Read); 
    byte[] b = new byte[fS.Length]; 
    fS.Read(b, 0, (int)fS.Length); 
    fS.Close(); 
    return b; 
} 

Und unter ‚Daten‘ wird auf die Web-API-Antwort übergeben werden.

byte[] data = ImageToBinary(<PATH HERE>); 

Was ich will, ist diese ‚Daten‘ beschränken nur von in der Anwendung zu PNG-Format konvertiert werden, wo dieser Web-API aufgerufen wird.

Zweck ist, dass ich nicht jedes Mal daran erinnern möchte, den anderen Entwickler, der die andere Anwendung codiert, die Sie nur in PNG konvertieren müssen.

Antwort

0

Ein PNG startet immer mit 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A Bytes.

So können Sie die ersten Bytes der Datei und die Erweiterung überprüfen.

Auf einer API sollten Sie Ihren Code kommentieren und gute Methodennamen verwenden, um Fehler zu vermeiden. Sie können Ihre Methodennamen von ImageToBinary zu PngImageToBinary ...

public static readonly byte[] PngSignature = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }; 
/// <summary> 
/// Convert a PNG from file path to byte array. 
/// </summary> 
/// <param name="imagePath">A relative or absolute path for the png file that need to be convert to byte array.</param> 
/// <returns>A byte array representation on the png file.</returns> 
public static byte[] PngImageToBinary(string imagePath) 
{ 
    if (!File.Exists(imagePath)) // Check file exist 
     throw new FileNotFoundException("File not found", imagePath); 
    if (Path.GetExtension(imagePath)?.ToLower() != ".png") // Check file extension 
     throw new ArgumentOutOfRangeException(imagePath, "Requiere a png extension"); 
    // Read stream 
    byte[] b; 
    using (var fS = new FileStream(imagePath, FileMode.Open, FileAccess.Read)) 
    { 
     b = new byte[fS.Length]; 
     fS.Read(b, 0, (int)fS.Length); 
     fS.Close(); 
    } 
    // Check first bytes of file, a png start with "PngSignature" bytes 
    if (b == null 
     || b.Length < PngSignature.Length 
     || PngSignature.Where((t, i) => b[i] != t).Any()) 
     throw new IOException($"{imagePath} is corrupted"); 

    return b; 
} 
+0

ImageToBinary Funktion in der Web-API verwendet wird, ändern Sie die byte [], die an die andere Anwendung senden zu erzeugen, so dass ich für ein Verfahren, wo ich kann sicherstellen, dass, wenn das Byte [] in der anderen Anwendung empfangen wird, es nicht in ein anderes Format konvertiert werden kann, sondern nur in PNG. – Dineesh

Verwandte Themen