首頁 >後端開發 >C++ >如何在完整閱讀之前用 C# 驗證圖像檔案?

如何在完整閱讀之前用 C# 驗證圖像檔案?

Patricia Arquette
Patricia Arquette原創
2024-12-30 14:35:10666瀏覽

How Can I Validate an Image File in C# Before Full Reading?

在 C# 中驗證檔案中的影像

從檔案載入影像是程式設計中的常見任務。然而,確保載入的圖像有效可能是一個挑戰,特別是在處理不可靠的來源時。本文提出了一種在從檔案中完全讀取影像之前對其進行驗證的解決方案,以防止潛在的錯誤。

要驗證影像,我們可以檢查其標頭,其中包含有關影像格式和尺寸的資訊。不同的圖像格式具有不同的標頭,透過將標頭位元組與已知模式進行比較,我們可以確定圖像的類型。

以下是C# 中的範例函數,用於在給定檔案路徑或流的情況下驗證影像:

public static bool IsValidImage(string fileName)
{
    try
    {
        using (var fileStream = File.OpenRead(fileName))
        {
            return IsValidImage(fileStream);
        }
    }
    catch (Exception ex)
    {
        // Handle exceptions here, e.g., FileNotFoundException
        return false;
    }
}

public static bool IsValidImage(Stream imageStream)
{

    // Read the header bytes from the stream
    byte[] headerBytes = new byte[4];
    imageStream.Position = 0;
    imageStream.Read(headerBytes, 0, headerBytes.Length);

    // Compare the header bytes to known patterns
    if (headerBytes.SequenceEqual(Encoding.ASCII.GetBytes("BM")))
    {
        return true; // BMP
    }
    else if (headerBytes.SequenceEqual(Encoding.ASCII.GetBytes("GIF")))
    {
        return true; // GIF
    }
    else if (headerBytes.SequenceEqual(new byte[] { 137, 80, 78, 71 }))
    {
        return true; // PNG
    }
    else if (headerBytes.SequenceEqual(new byte[] { 73, 73, 42 }) || headerBytes.SequenceEqual(new byte[] { 77, 77, 42 }))
    {
        return true; // TIFF
    }
    else if (headerBytes.SequenceEqual(new byte[] { 255, 216, 255, 224 }) || headerBytes.SequenceEqual(new byte[] { 255, 216, 255, 225 }))
    {
        return true; // JPEG
    }
    else
    {
        return false; // Unknown format
    }
}

此程式碼檢查影像的標頭位元組,並將它們與與各種圖像格式相關的已知模式進行比較。如果標頭與已知模式匹配,則函數傳回 true。否則,返回 false。

以上是如何在完整閱讀之前用 C# 驗證圖像檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn