在C# 中驗證影像檔案
從檔案載入影像時,驗證其真實性和完整性非常重要,以防止潛在的錯誤或安全性漏洞。本文解決了在將影像檔案完全讀入記憶體之前對其進行驗證的問題。
當圖片檔案(例如「image.jpg」)實際上可能不是 JPG 格式時,就會出現問題。當使用 Image.FromFile(filePath) 等影像載入函數處理影像時,這可能會導致異常,例如 OutOfMemory Exception。
解決方案是使用一個可以在給定檔案路徑的情況下驗證影像的函數或流。範例函數原型可以是:
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 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; }
此函數可用於在影像完全載入之前檢查影像的有效性,有助於確保正確處理無效或損壞的影像。
以上是在將圖像檔案載入到記憶體之前,如何在 C# 中驗證圖像檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!