Maison > développement back-end > C++ > Comment puis-je valider les fichiers image en C# avant de les charger en mémoire ?

Comment puis-je valider les fichiers image en C# avant de les charger en mémoire ?

Mary-Kate Olsen
Libérer: 2025-01-04 09:46:35
original
964 Les gens l'ont consulté

How Can I Validate Image Files in C# Before Loading Them into Memory?

Valider les fichiers image en C#

Lors du chargement d'images à partir de fichiers, il est important de valider leur authenticité et leur intégrité pour éviter des erreurs potentielles ou des problèmes de sécurité vulnérabilités. Cet article aborde la question de la validation des fichiers image avant de les lire entièrement en mémoire.

Le problème survient lorsqu'un fichier image, tel que « image.jpg », n'est peut-être pas réellement au format JPG. Cela peut conduire à des exceptions, telles que l'exception OutOfMemory, lorsque l'image est traitée à l'aide de fonctions de chargement d'image telles que Image.FromFile(filePath).

Une solution consiste à utiliser une fonction qui peut valider une image en fonction d'un chemin de fichier. ou diffuser. Un exemple de prototype de fonction pourrait être :

bool IsValidImage(string fileName);
bool IsValidImage(Stream imageStream);
Copier après la connexion

Pour implémenter cette fonction, nous pouvons utiliser des modèles d'octets pour identifier le format de l'image. Voici un exemple de code C# :

public enum ImageFormat
{
    bmp,
    jpeg,
    gif,
    tiff,
    png,
    unknown
}

public static ImageFormat GetImageFormat(byte[] bytes)
{
    // Byte patterns for different image formats
    var bmp    = Encoding.ASCII.GetBytes("BM");     // BMP
    var gif    = Encoding.ASCII.GetBytes("GIF");    // GIF
    var png    = new byte[] { 137, 80, 78, 71 };    // PNG
    var tiff   = new byte[] { 73, 73, 42 };         // TIFF
    var tiff2  = new byte[] { 77, 77, 42 };         // TIFF
    var jpeg   = new byte[] { 255, 216, 255, 224 }; // jpeg
    var jpeg2  = new byte[] { 255, 216, 255, 225 }; // jpeg canon

    // Check byte sequences to determine image format
    if (bmp.SequenceEqual(bytes.Take(bmp.Length)))
        return ImageFormat.bmp;

    if (gif.SequenceEqual(bytes.Take(gif.Length)))
        return ImageFormat.gif;

    if (png.SequenceEqual(bytes.Take(png.Length)))
        return ImageFormat.png;

    if (tiff.SequenceEqual(bytes.Take(tiff.Length)))
        return ImageFormat.tiff;

    if (tiff2.SequenceEqual(bytes.Take(tiff2.Length)))
        return ImageFormat.tiff;

    if (jpeg.SequenceEqual(bytes.Take(jpeg.Length)))
        return ImageFormat.jpeg;

    if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length)))
        return ImageFormat.jpeg;

    return ImageFormat.unknown;
}
Copier après la connexion

Cette fonction peut être utilisée pour vérifier la validité d'une image avant qu'elle ne soit complètement chargée, contribuant ainsi à garantir que les images invalides ou corrompues sont traitées correctement.

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