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);
}