Heim >Backend-Entwicklung >C++ >Wie kann ich eine Bilddatei in C# vor dem vollständigen Lesen validieren?

Wie kann ich eine Bilddatei in C# vor dem vollständigen Lesen validieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-30 14:35:10666Durchsuche

How Can I Validate an Image File in C# Before Full Reading?

Bild aus Datei in C# validieren

Das Laden von Bildern aus Dateien ist eine häufige Aufgabe in der Programmierung. Allerdings kann es eine Herausforderung sein, sicherzustellen, dass das geladene Bild gültig ist, insbesondere wenn es sich um unzuverlässige Quellen handelt. In diesem Artikel wird eine Lösung vorgestellt, um ein Bild zu validieren, bevor es vollständig aus einer Datei gelesen wird, um mögliche Fehler zu vermeiden.

Um ein Bild zu validieren, können wir seinen Header untersuchen, der Informationen über das Format und die Abmessungen des Bildes enthält. Verschiedene Bildformate haben unterschiedliche Header, und durch den Vergleich der Header-Bytes mit bekannten Mustern können wir den Bildtyp bestimmen.

Hier ist eine Beispielfunktion in C#, die ein Bild anhand eines Dateipfads oder Streams validiert:

public static bool IsValidImage(string fileName)
{
    try
    {
        using (var fileStream = File.OpenRead(fileName))
        {
            return IsValidImage(fileStream);
        }
    }
    catch (Exception ex)
    {
        // Handle exceptions here, e.g., FileNotFoundException
        return false;
    }
}

public static bool IsValidImage(Stream imageStream)
{

    // Read the header bytes from the stream
    byte[] headerBytes = new byte[4];
    imageStream.Position = 0;
    imageStream.Read(headerBytes, 0, headerBytes.Length);

    // Compare the header bytes to known patterns
    if (headerBytes.SequenceEqual(Encoding.ASCII.GetBytes("BM")))
    {
        return true; // BMP
    }
    else if (headerBytes.SequenceEqual(Encoding.ASCII.GetBytes("GIF")))
    {
        return true; // GIF
    }
    else if (headerBytes.SequenceEqual(new byte[] { 137, 80, 78, 71 }))
    {
        return true; // PNG
    }
    else if (headerBytes.SequenceEqual(new byte[] { 73, 73, 42 }) || headerBytes.SequenceEqual(new byte[] { 77, 77, 42 }))
    {
        return true; // TIFF
    }
    else if (headerBytes.SequenceEqual(new byte[] { 255, 216, 255, 224 }) || headerBytes.SequenceEqual(new byte[] { 255, 216, 255, 225 }))
    {
        return true; // JPEG
    }
    else
    {
        return false; // Unknown format
    }
}

Dieser Code untersucht die Header-Bytes des Bildes und vergleicht sie mit bekannten Mustern, die mit verschiedenen Bildformaten verknüpft sind. Wenn der Header mit einem bekannten Muster übereinstimmt, gibt die Funktion „true“ zurück. Andernfalls wird false zurückgegeben.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Bilddatei in C# vor dem vollständigen Lesen validieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn