国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#獲取圖片的后綴名解析

2020-01-24 02:48:04
字體:
供稿:網(wǎng)友

要說,這也是一個(gè)很簡(jiǎn)單的功能,沒必要開一篇博客這么大動(dòng)干戈。 對(duì)于一張知道全路徑的照片,如果其路徑包含后綴名的話,要取得后綴名,只需要一行代碼即可:

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

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實(shí)例的對(duì)應(yīng)關(guān)系。需要注意的是,對(duì)于jpg格式,這里取到的是jpeg。反射的效率很低,所以我們需要將產(chǎn)生的結(jié)果緩存起來。

復(fù)制代碼 代碼如下:

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

采用按需加載,減少啟動(dòng)時(shí)間。不過,如果你是多線程環(huán)境,最好能夠加個(gè)鎖。剩下的事情就好辦了,循環(huán)這個(gè)字典,對(duì)比字典值的Guid,返回字典的鍵就可以。

復(fù)制代碼 代碼如下:

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

使用方法:

復(fù)制代碼 代碼如下:

using (var img = Image.FromFile(@"C:/soar"))
{
    var ext = GetExtension(img);
}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新龙县| 大同市| 平果县| 宿州市| 开化县| 久治县| 台南县| 青州市| 连州市| 汾西县| 合江县| 磴口县| 绍兴县| 临夏市| 太保市| 堆龙德庆县| 新疆| 岳普湖县| 双鸭山市| 林甸县| 故城县| 手游| 泸水县| 云梦县| 乌拉特中旗| 伊川县| 社会| 余姚市| 沂南县| 皋兰县| 张北县| 桐乡市| 肇东市| 南昌市| 北票市| 天气| 寿光市| 盐亭县| 桃园市| 崇仁县| 镇安县|