C#獲取圖片的后綴名解析
要說(shuō),這也是一個(gè)很簡(jiǎn)單的功能,沒(méi)必要開(kāi)一篇博客這么大動(dòng)干戈。 對(duì)于一張知道全路徑的照片,如果其路徑包含后綴名的話,要取得后綴名,只需要一行代碼即可:
var ext = System.IO.Path.GetExtension("C:\\soar.jpg");
可是,如果這個(gè)文件的文件名不包含后綴怎么辦? 在C#中并沒(méi)有提供直接獲取圖片格式的方法,如果想根據(jù)圖片(也就是Image對(duì)象)獲取圖片格式,那么就需要另辟蹊徑了。 首先,我們可以在`Image`對(duì)象中看到一個(gè)類型為`ImageFormat`的`RawFormat`屬性。但是,通過(guò)這個(gè)屬性,我們只能取到這個(gè)圖片格式的Guid,而無(wú)法取到具體的名稱。不過(guò),在`ImageFormat`類中采用靜態(tài)屬性的方式羅列了幾個(gè)常用的圖片格式,有了這些,我們就可以通過(guò)“一一對(duì)照”的方式來(lái)拿到一張圖片具體的后綴名了。 首先,我們需要得到在`ImageFormat`中羅列出來(lái)的圖片格式。硬編碼是一個(gè)很蠢的主意,所以,我們采用反射取值。
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;
}
通過(guò)上面的代碼,我們就能取到“圖片后綴”和ImageFormat實(shí)例的對(duì)應(yīng)關(guān)系。需要注意的是,對(duì)于jpg格式,這里取到的是jpeg。反射的效率很低,所以我們需要將產(chǎn)生的結(jié)果緩存起來(lái)。
private static Dictionary<String, ImageFormat> _imageFormats;
/// <summary>
/// 獲取 所有支持的圖片格式字典
/// </summary>
public static Dictionary<String, ImageFormat> ImageFormats
{
get
{
return _imageFormats ?? (_imageFormats = GetImageFormats());
}
}
采用按需加載,減少啟動(dòng)時(shí)間。不過(guò),如果你是多線程環(huán)境,最好能夠加個(gè)鎖。剩下的事情就好辦了,循環(huán)這個(gè)字典,對(duì)比字典值的Guid,返回字典的鍵就可以。
/// <summary>
/// 根據(jù)圖像獲取圖像的擴(kuò)展名
/// </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);
}
- 詳解C#編程獲取資源文件中圖片的方法
- 使用C#正則表達(dá)式獲取必應(yīng)每日?qǐng)D片地址
- c# 應(yīng)用NPOI獲取Excel中的圖片,保存至本地的算法
- C#獲取HTML文本的第一張圖片與截取內(nèi)容摘要示例代碼
- C#遠(yuǎn)程獲取圖片文件流的方法
- C#編程獲取資源文件中圖片的方法
- C#獲取圖片文件擴(kuò)展名的方法
- 使用C#獲取遠(yuǎn)程圖片 Form用戶名與密碼Authorization認(rèn)證的實(shí)現(xiàn)
- asp.net(c#)獲取內(nèi)容第一張圖片地址的函數(shù)
- C#根據(jù)http和ftp圖片地址獲取對(duì)應(yīng)圖片
相關(guān)文章
C#中FlagsAttribute屬性在enum中的應(yīng)用詳解
這篇文章主要介紹了C#中FlagsAttribute屬性在enum中的應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10C# TreeView從數(shù)據(jù)庫(kù)綁定數(shù)據(jù)的示例
這篇文章主要介紹了C# TreeView從數(shù)據(jù)庫(kù)綁定數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03C#實(shí)現(xiàn)操作windows系統(tǒng)服務(wù)(service)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)操作windows系統(tǒng)服務(wù)(service)的方法,可實(shí)現(xiàn)系統(tǒng)服務(wù)的啟動(dòng)和停止功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例
這篇文章主要介紹了C# 中 System.Index 結(jié)構(gòu)體和 Hat 運(yùn)算符(^)的使用示例,幫助大家更好的理解和使用C#,感興趣的朋友可以了解下2020-09-09Winform窗體縮放下使用剪切板功能出現(xiàn)頁(yè)面閃動(dòng)解決分析
這篇文章主要介紹了Winform窗體縮放下使用剪切板功能出現(xiàn)頁(yè)面閃動(dòng)解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11C#實(shí)現(xiàn)的基于二進(jìn)制讀寫文件操作示例
這篇文章主要介紹了C#實(shí)現(xiàn)的基于二進(jìn)制讀寫文件操作,結(jié)合具體實(shí)例形式分析了C#以二進(jìn)制文件流形式針對(duì)文件進(jìn)行讀寫操作的相關(guān)技巧,需要的朋友可以參考下2017-07-07C#中JSON轉(zhuǎn)為實(shí)體類和List以及結(jié)合使用
開(kāi)發(fā)中經(jīng)常遇到將JSON字符串轉(zhuǎn)換為L(zhǎng)ist的需求,下面這篇文章主要給大家介紹了關(guān)于C#中JSON轉(zhuǎn)為實(shí)體類和List以及結(jié)合使用的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01幾分鐘搞懂c#之FileStream對(duì)象讀寫大文件(推薦)
這篇文章主要介紹了c#之FileStream對(duì)象讀寫大文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04