这篇文章主要介绍了c#获取图片正确格式的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
大部分时候,我们可以通过从图片路径中截取扩展名的方式拿到一个图片的格式:
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#获取图片格式的资料请关注得得之家其它相关文章!
本文标题为:c#获取图片正确格式的方法
基础教程推荐
- C# windows语音识别与朗读实例 2023-04-27
- winform把Office转成PDF文件 2023-06-14
- 一个读写csv文件的C#类 2022-11-06
- unity实现动态排行榜 2023-04-27
- C# 调用WebService的方法 2023-03-09
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C#类和结构详解 2023-05-30
- C#控制台实现飞行棋小游戏 2023-04-22
- C# List实现行转列的通用方案 2022-11-02
- ZooKeeper的安装及部署教程 2023-01-22