c#获取图片正确格式的方法
大部分时候,我们可以通过从图片路径中截取扩展名的方式拿到一个图片的格式:
varext=Path.GetExtension("C:\\coderbusy.jpg"); Console.WriteLine(ext);
这将会显示出:
jpg
但是如果我们拿到的只是数据流或者是路径名不被信任的场景(比如扩展名是随机字符串的临时文件)那么我们可能就需要从文件内容反推文件格式。
幸运的是:.NET为我们提供了Image类型用于表示一个图片。Image类型包含一个类型为ImageFormat的RawFormat属性,通过它我们可以准确的拿到图片的格式。如果我们直接调用RawFormat属性的ToString方法,就能拿到图片的原始格式:
varimg=Image.FromFile(@"D:\coderbusy.jpg"); Console.WriteLine(img.RawFormat.ToString());
这将会显示出:
Jpeg
不幸的是,在使用.NETFramework2版本时,ImageFormat的ToString方法实现有误,这导致同样的代码在.NETFramework2下的输出是这个样子的:
[ImageFormat:b96b3cae-0728-11d3-9d7b-0000f81ef32e]
为了做到代码全平台通用,笔者封装了ImageHelper类型,该类型包含一个GetExtension方法。通过调用该方法可以准确的获取到图片的原始格式:
publicstaticclassImageHelper { staticImageHelper() { lock(typeof(ImageHelper)) { _mapping=GetImageFormatMapping(); } } privatestaticIDictionary_mapping; privatestaticIDictionary GetImageFormatMapping() { vardic=newDictionary (); varproperties=typeof(ImageFormat).GetProperties( BindingFlags.Static|BindingFlags.Public ); foreach(varpropertyinproperties) { varformat=property.GetValue(null,null)asImageFormat; if(format==null)continue; dic[format.Guid]="."+property.Name.ToLower(); } returndic; } publicstaticStringGetExtension(Imageimage) { varformat=image.RawFormat; if(_mapping.ContainsKey(format.Guid)) { return_mapping[format.Guid]; } returnString.Empty; } }
以上代码在ImageHelper的静态构造函数中反射获取了ImageFormat类型的所有静态字段,并将字段的Guid值与字段名称做了一个映射。当我们需要获取某个图片的格式时,先通过RawForamt属性获得Guid,之后查表给出对应的格式。
调用方式如下:
varimg=Image.FromFile(@"D:\coderbusy.jpg"); varext=ImageHelper.GetExtension(img); Console.WriteLine(ext);
以上就是c#获取图片正确格式的方法的详细内容,更多关于C#获取图片格式的资料请关注毛票票其它相关文章!