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);
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; }
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!