如何在C# 中驗證映像檔格式
從檔案載入圖片時,驗證對於防止諸如OutOfMemoryExceptions 之類的錯誤至關重要。然而,僅僅依靠檔案副檔名是不可靠的。
驗證函數原型
bool IsValidImage(string fileName); bool IsValidImage(Stream imageStream);
解決方案:基於字節簽名的圖像驗證
可靠的方法是檢查文件的位元組簽名,這提供有關其格式的資訊。這是 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; }
使用範例
// 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 }
以上是如何在 C# 中可靠地驗證影像檔案格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!