亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用C#判斷文件是否為圖片的多種方法

 更新時間:2024年10月18日 10:52:42   作者:肖恩  
在開發(fā)中,我們常需要判斷一個文件是否為圖片,這看似簡單,但要實現(xiàn)得既高效又嚴(yán)謹(jǐn),需要根據(jù)不同場景選擇合適的方法,本文記錄了幾種常見的判斷方式,并推薦使用?SixLabors.ImageSharp?來替代已被淘汰的?System.Drawing,需要的朋友可以參考下

0、常見的判斷圖片文件的方法

判斷文件是否為圖片的方式主要有三種:

  • 根據(jù)文件擴(kuò)展名判斷
  • 通過文件頭(Magic Number)判斷
  • 嘗試加載文件判斷(推薦:使用 ImageSharp)

1. 根據(jù)文件擴(kuò)展名判斷

這是最簡單的方式,通過判斷文件的擴(kuò)展名來判斷是否是圖片。雖然實現(xiàn)簡單,但不夠嚴(yán)謹(jǐn),因為文件擴(kuò)展名可以被偽造。

代碼示例

public bool IsImageByExtension(string filePath) 
{ 
    // 支持的圖片格式擴(kuò)展名 
    string[] validExtensions = { ".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tiff", ".webp" }; 
    string extension = Path.GetExtension(filePath)?.ToLower(); // 獲取文件擴(kuò)展名并轉(zhuǎn)為小寫 
    return validExtensions.Contains(extension); 
}

優(yōu)缺點

  • 優(yōu)點:實現(xiàn)簡單,性能高。
  • 缺點:無法保證文件內(nèi)容確實是圖片,可能會被偽造。

2. 通過文件頭(Magic Number)判斷

每種文件格式都有獨特的二進(jìn)制頭部(Magic Number)。通過讀取文件的前幾個字節(jié)并與常見圖片格式的 Magic Number 進(jìn)行匹配,可以更準(zhǔn)確地判斷文件類型。

代碼示例

public bool IsImageByHeader(string filePath)
{
    // 定義常見圖片格式的Magic Number
    var imageHeaders = new Dictionary<string, byte[]>
    {
        { "jpg", new byte[] { 0xFF, 0xD8 } },
        { "png", new byte[] { 0x89, 0x50, 0x4E, 0x47 } },
        { "gif", new byte[] { 0x47, 0x49, 0x46 } },
        { "bmp", new byte[] { 0x42, 0x4D } },
        { "tiff", new byte[] { 0x49, 0x49, 0x2A, 0x00 } }
    };
 
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        byte[] buffer = new byte[4]; // 讀取文件前4個字節(jié)
        fs.Read(buffer, 0, buffer.Length);
 
        // 判斷文件頭是否匹配某個圖片格式
        foreach (var header in imageHeaders.Values)
        {
            if (buffer.Take(header.Length).SequenceEqual(header))
                return true;
        }
    }
    return false;
}

優(yōu)缺點

  • 優(yōu)點:更可靠,確保文件頭與圖片格式匹配。
  • 缺點:需要解析文件內(nèi)容,稍微占用資源。

3. 使用 ImageSharp 判斷文件是否為圖片

隨著 .NET 6 及以上版本中 System.Drawing 被棄用,推薦使用 SixLabors.ImageSharp 庫來判斷文件是否為圖片。ImageSharp 是一個跨平臺的圖像處理庫,支持多種圖片格式,并能確保文件不僅是圖片擴(kuò)展名匹配,還確實能被解析為圖片格式。

安裝 ImageSharp

使用以下命令安裝 ImageSharp

dotnet add package SixLabors.ImageSharp

或者在項目的 .csproj 文件中添加:

<PackageReference Include="SixLabors.ImageSharp" Version="3.0.0" />

代碼示例:使用 ImageSharp 檢測文件類型

using SixLabors.ImageSharp;
 
public bool IsImageByImageSharp(string filePath)
{
    try
    {
        // 使用 Image.Load 檢測文件是否為有效圖片
        using (var image = Image.Load(filePath))
        {
            return true;
        }
    }
    catch (SixLabors.ImageSharp.UnknownImageFormatException)
    {
        // 格式不支持或不是圖片
        return false;
    }
    catch (Exception)
    {
        // 其他異常,如文件不存在等
        return false;
    }
}

代碼解析

  • Image.Load:如果文件是支持的圖片格式,會成功加載,否則拋出異常。
  • UnknownImageFormatException:當(dāng)文件不是圖片或格式不支持時拋出此異常。
  • 其他異常:捕獲如文件路徑錯誤等情況,避免程序崩潰。

優(yōu)缺點

  • 優(yōu)點:嚴(yán)謹(jǐn)可靠,確保文件內(nèi)容確實是圖片格式。
  • 缺點:加載文件時會稍占用資源。

支持的圖片格式

ImageSharp 支持常見的圖片格式:

ImageSharp 支持常見的圖片格式:

  • JPEG (.jpg.jpeg)
  • PNG (.png)
  • GIF (.gif)
  • BMP (.bmp)
  • TIFF (.tiff)
  • WEBP (.webp)

4、總結(jié)

以上就是使用C#判斷文件是否為圖片的多種方法的詳細(xì)內(nèi)容,更多關(guān)于C#判斷文件是否為圖片的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論