Comment valider le format de fichier image en C#
Lors du chargement d'une image à partir d'un fichier, la validation est cruciale pour éviter des erreurs telles que OutOfMemoryExceptions. Cependant, se fier uniquement aux extensions de fichiers peut s'avérer peu fiable.
Prototypes de fonctions de validation
bool IsValidImage(string fileName); bool IsValidImage(Stream imageStream);
Solution : validation d'image basée sur les signatures d'octets
Une approche fiable consiste à vérifier la signature d'octet du fichier, qui fournit des informations sur son format. Voici une implémentation C# :
public enum ImageFormat { bmp, jpeg, gif, tiff, png, unknown } public static ImageFormat GetImageFormat(byte[] bytes) { // Byte signatures for various 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 // Compare the byte signatures to the input bytes 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; }
Exemples d'utilisation
// Example 1: Validate an image using a file path if (IsValidImage(filePath)) { // Load the image safely } // Example 2: Validate an image using a stream Stream imageStream = new FileStream(filePath, FileMode.Open); if (IsValidImage(imageStream)) { // Load the image safely }
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!