首頁 > 後端開發 > C++ > 在將圖像檔案載入到記憶體之前,如何在 C# 中驗證圖像檔案?

在將圖像檔案載入到記憶體之前,如何在 C# 中驗證圖像檔案?

Mary-Kate Olsen
發布: 2025-01-04 09:46:35
原創
925 人瀏覽過

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

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板