服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - c#获取图片正确格式的方法

c#获取图片正确格式的方法

2022-09-22 15:37Soar、毅 C#

这篇文章主要介绍了c#获取图片正确格式的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

大部分时候,我们可以通过从图片路径中截取扩展名的方式拿到一个图片的格式:

?
1
2
var ext = Path.GetExtension("C:\\coderbusy.jpg");
Console.WriteLine(ext);

这将会显示出:

jpg

但是如果我们拿到的只是数据流或者是路径名不被信任的场景(比如扩展名是随机字符串的临时文件)那么我们可能就需要从文件内容反推文件格式。

幸运的是:.NET 为我们提供了 Image 类型用于表示一个图片。Image 类型包含一个类型为 ImageFormat 的 RawFormat 属性,通过它我们可以准确的拿到图片的格式。如果我们直接调用 RawFormat 属性的 ToString 方法,就能拿到图片的原始格式:

?
1
2
var img = Image.FromFile(@"D:\coderbusy.jpg");
Console.WriteLine(img.RawFormat.ToString());

这将会显示出:

Jpeg

不幸的是,在使用 .NET Framework 2 版本时,ImageFormat 的 ToString 方法实现有误,这导致同样的代码在 .NET Framework 2 下的输出是这个样子的:

[ImageFormat: b96b3cae-0728-11d3-9d7b-0000f81ef32e]

为了做到代码全平台通用,笔者封装了 ImageHelper 类型,该类型包含一个 GetExtension 方法。通过调用该方法可以准确的获取到图片的原始格式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public static class ImageHelper
{
    static ImageHelper()
    {
        lock (typeof(ImageHelper))
        {
            _mapping = GetImageFormatMapping();
        }
    }
    private static IDictionary<Guid, String> _mapping;
    private static IDictionary<Guid, String> GetImageFormatMapping()
    {
        var dic = new Dictionary<Guid, String>();
        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[format.Guid] = "." + property.Name.ToLower();
        }
        return dic;
    }
 
    public static String GetExtension(Image image)
    {
        var format = image.RawFormat;
        if (_mapping.ContainsKey(format.Guid))
        {
            return _mapping[format.Guid];
        }
        return String.Empty;
    }
}

以上代码在 ImageHelper 的静态构造函数中反射获取了 ImageFormat 类型的所有静态字段,并将字段的 Guid 值与字段名称做了一个映射。当我们需要获取某个图片的格式时,先通过 RawForamt 属性获得 Guid ,之后查表给出对应的格式。

调用方式如下:

?
1
2
3
var img = Image.FromFile(@"D:\coderbusy.jpg");
var ext = ImageHelper.GetExtension(img);
Console.WriteLine(ext);

以上就是c#获取图片正确格式的方法的详细内容,更多关于C#获取图片格式的资料请关注服务器之家其它相关文章!

原文链接:https://www.coderbusy.com/archives/326.html

延伸 · 阅读

精彩推荐
  • C#C#正则函数用法实例【匹配、替换、提取】

    C#正则函数用法实例【匹配、替换、提取】

    这篇文章主要介绍了C#正则函数用法,结合实例形式分析了C#基于正则的匹配、替换、提取相关操作技巧,需要的朋友可以参考下...

    pan_junbiao11412021-12-20
  • C#C# 根据表格偶数、奇数加载不同颜色

    C# 根据表格偶数、奇数加载不同颜色

    这篇文章主要介绍了C# 根据表格偶数、奇数加载不同颜色,需要的朋友可以参考下...

    闫驚鏵3492022-01-22
  • C#C# 在PDF中创建和填充域

    C# 在PDF中创建和填充域

    本文主要介绍了C# 在PDF中创建和填充域的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧...

    Yesi9212021-12-29
  • C#C#浮点数的表示和基本运算

    C#浮点数的表示和基本运算

    这篇文章主要介绍了C#浮点数的表示和基本运算,需要的朋友可以参考下...

    flyingbread9012021-12-11
  • C#C#程序连接数据库及读取数据库中字段的简单方法总结

    C#程序连接数据库及读取数据库中字段的简单方法总结

    包括C#连接Access、Oracle或者SQL Server,这里整理了一些C#连接数据库及从读取数据库中字段的简单方法总结,需要的朋友可以参考下...

    shylx1239902021-11-22
  • C#C#登入实例

    C#登入实例

    本篇文章通过截图的方式向大家展示C#程序登陆实现的全过程,利用了C#三层架构的编写方法,希望对大家今后编写代码有所帮助...

    sctnl5842021-12-10
  • C#C#以流方式读socket超时设置的实例

    C#以流方式读socket超时设置的实例

    这篇文章主要为大家详细介绍了C#以流方式读socket超时设置的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    If I talk to god3332022-02-21
  • C#详解C#之委托

    详解C#之委托

    这篇文章主要介绍了C#委托的含义以及用法,文中代码非常详细,帮助大家更好的理解和学习...

    千金不如一默3422022-09-09