时间:2021-05-20
大部分时候,我们可以通过从图片路径中截取扩展名的方式拿到一个图片的格式:
var ext = Path.GetExtension("C:\\coderbusy.jpg");Console.WriteLine(ext);这将会显示出:
jpg
但是如果我们拿到的只是数据流或者是路径名不被信任的场景(比如扩展名是随机字符串的临时文件)那么我们可能就需要从文件内容反推文件格式。
幸运的是:.NET 为我们提供了 Image 类型用于表示一个图片。Image 类型包含一个类型为 ImageFormat 的 RawFormat 属性,通过它我们可以准确的拿到图片的格式。如果我们直接调用 RawFormat 属性的 ToString 方法,就能拿到图片的原始格式:
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 方法。通过调用该方法可以准确的获取到图片的原始格式:
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 ,之后查表给出对应的格式。
调用方式如下:
var img = Image.FromFile(@"D:\coderbusy.jpg");var ext = ImageHelper.GetExtension(img);Console.WriteLine(ext);以上就是c#获取图片正确格式的方法的详细内容,更多关于C#获取图片格式的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
详解C#编程获取资源文件中图片的方法本文主要介绍C#编程获取资源文件中图片的方法,涉及C#针对项目中资源文件操作的相关技巧,以供借鉴参考。具体内容如下:例子:u
很多时候木马程序会伪装成其他格式的文件上传到网站,最常见的如图片格式。本文就以C#为例讲述C#判断上传文件是否是图片以防止木马上传的方法,具体方法如下:方法一:
本文实例讲述了C#使用xsd文件验证XML格式是否正确的实现方法。分享给大家供大家参考,具体如下://创建xmlDocumentXmlDocumentdoc=n
本文将介绍一段实例代码,来讲解利用正则表达式使C#判断输入日期格式是否正确的方法。希望这段代码能对大家有所帮助。通常我们在用C#编写系统程序或者Web开发时,都
本文实例讲述了C#实现验证身份证是否合法的方法。分享给大家供大家参考。具体分析如下:这段C#代码主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份