程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#獲取圖片的後綴名

C#獲取圖片的後綴名

編輯:C#基礎知識

要說,這也是一個很簡單的功能,沒必要開一篇博客這麼大動干戈。 對於一張知道全路徑的照片,如果其路徑包含後綴名的話,要取得後綴名,只需要一行代碼即可:

var ext = System.IO.Path.GetExtension("C:\\soar.jpg");

可是,如果這個文件的文件名不包含後綴怎麼辦? 在C#中並沒有提供直接獲取圖片格式的方法,如果想根據圖片(也就是Image對象)獲取圖片格式,那麼就需要另辟蹊徑了。 首先,我們可以在`Image`對象中看到一個類型為`ImageFormat`的`RawFormat`屬性。但是,通過這個屬性,我們只能取到這個圖片格式的Guid,而無法取到具體的名稱。不過,在`ImageFormat`類中采用靜態屬性的方式羅列了幾個常用的圖片格式,有了這些,我們就可以通過“一一對照”的方式來拿到一張圖片具體的後綴名了。 首先,我們需要得到在`ImageFormat`中羅列出來的圖片格式。硬編碼是一個很蠢的主意,所以,我們采用反射取值。

private static Dictionary<String, ImageFormat> GetImageFormats() {     var dic = new Dictionary<String, ImageFormat>();     var properties = typeof(ImageFormat).GetProperties(BindingFlags.Static | BindingFlags.Public);     foreach (var property in properties)     {         var format = property.GetValue(null, null) as ImageFormat;         if (format == null) continue;         dic.Add(("." + property.Name).ToLower(), format);     }     return dic; }

通過上面的代碼,我們就能取到“圖片後綴”和ImageFormat實例的對應關系。需要注意的是,對於jpg格式,這裡取到的是jpeg。反射的效率很低,所以我們需要將產生的結果緩存起來。

private static Dictionary<String, ImageFormat> _imageFormats; /// <summary> /// 獲取 所有支持的圖片格式字典 /// </summary> public static Dictionary<String, ImageFormat> ImageFormats {     get     {         return _imageFormats ?? (_imageFormats = GetImageFormats());     } }

采用按需加載,減少啟動時間。不過,如果你是多線程環境,最好能夠加個鎖。剩下的事情就好辦了,循環這個字典,對比字典值的Guid,返回字典的鍵就可以。

/// <summary> /// 根據圖像獲取圖像的擴展名 /// </summary> /// <param name="image"></param> /// <returns></returns> public static String GetExtension(Image image) {     foreach (var pair in ImageFormats)     {         if (pair.Value.Guid == image.RawFormat.Guid)         {             return pair.Key;         }     }     throw new BadImageFormatException(); }

使用方法:

using (var img = Image.FromFile(@"C:\soar")) {     var ext = GetExtension(img); }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved