Maison > développement back-end > C++ > Comment puis-je valider un fichier image en C# avant la lecture complète ?

Comment puis-je valider un fichier image en C# avant la lecture complète ?

Patricia Arquette
Libérer: 2024-12-30 14:35:10
original
704 Les gens l'ont consulté

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

Valider l'image à partir d'un fichier en C#

Le chargement d'images à partir de fichiers est une tâche courante en programmation. Cependant, s’assurer que l’image chargée est valide peut s’avérer un défi, surtout lorsqu’il s’agit de sources peu fiables. Cet article présente une solution pour valider une image avant qu'elle ne soit entièrement lue à partir d'un fichier, évitant ainsi des erreurs potentielles.

Pour valider une image, nous pouvons examiner son en-tête, qui contient des informations sur le format et les dimensions de l'image. Différents formats d'image ont des en-têtes distincts, et en comparant les octets d'en-tête à des modèles connus, nous pouvons déterminer le type d'image.

Voici un exemple de fonction en C# qui valide une image en fonction d'un chemin de fichier ou d'un flux :

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
    }
}
Copier après la connexion

Ce code examine les octets d'en-tête de l'image et les compare aux modèles connus associés à divers formats d'image. Si l'en-tête correspond à un modèle connu, la fonction renvoie vrai. Sinon, il renvoie false.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal