栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 _mapping;
	private static IDictionary GetImageFormatMapping()
	{
		var dic = new Dictionary();
		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#获取图片格式的资料请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121950.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号