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#获取图片格式的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#获取某路径文件夹中全部图片或其它指定格式的文件名的实例方法

    1.编写获取文件名(全路径)子函数 /////param ///path:文件夹路径 ///suffix:后缀格式, 如bmp,txt ///fileList:文件名存放 ///isSubcatalog:true遍历子文件夹,否则不遍历 void getFiles(string path, string suffix, ref List<string> fileList, bool isSubcatalog) { string filename; DirectoryInfo dir = new

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

    大部分时候,我们可以通过从图片路径中截取扩展名的方式拿到一个图片的格式: var ext = Path.GetExtension("C:\\coderbusy.jpg"); Console.WriteLine(ext); 这将会显示出: jpg 但是如果我们拿到的只是数据流或者是路径名不被信任的场景(比如扩展名是随机字符串的临时文件)那么我们可能就需要从文件内容反推文件格式. 幸运的是:.NET 为我们提供了 Image 类型用于表示一个图片.Image 类型包含一个类型为 Image

  • python获取图片颜色信息的方法

    本文实例讲述了python获取图片颜色信息的方法.分享给大家供大家参考.具体分析如下: python的pil模块可以从图片获得图片每个像素点的颜色信息,下面的代码演示了如何获取图片所有点的颜色信息和每种颜色的数量. from PIL import Image image = Image.open("jb51.gif") image.getcolors() 返回结果如下 复制代码 代码如下: ..., (44, (72, 64, 55, 255)), (32, (231, 208, 14

  • js获取图片宽高的方法

    本文分享多种js获取图片宽高的方法,并且通过实例进行分析,希望大家从中有所收获. 一.简陋的获取图片方式 // 图片地址 后面加时间戳是为了避免缓存 var img_url = 'upload/2013/13643608813441.jpg?'+Date.parse(new Date()); // 创建对象 var img = new Image(); // 改变图片的src img.src = img_url; // 打印 alert('width:'+img.width+',height:'

  • JS获取图片lowsrc属性的方法

    本文实例讲述了JS获取图片lowsrc属性的方法.分享给大家供大家参考.具体如下: lowsrc属性一般设置为图片的低分辨率图片地址,下面的代码可以通过点击链接显示图片的低分辨率版本 <!DOCTYPE html> <html> <body> <img id="compman" src="compman.gif" lowsrc="compman_lowres.gif" alt="Computer

  • PHP编程获取图片的主色调的方法【基于Imagick扩展】

    本文实例讲述了PHP编程获取图片的主色调的方法.分享给大家供大家参考,具体如下: 代码中用到了php的图片扩展,所以使用之前,需要先安装PHP的Imagick扩展,具体安装如下(window下): windows7下安装php的imagick和imagemagick扩展教程 代码如下: <?php $average = new Imagick("./fruit/143511081321676_593.jpg"); $average->quantizeImage( 10, I

  • C#远程获取图片文件流的方法

    本文实例讲述了C#远程获取图片文件流的方法.分享给大家供大家参考,具体如下: protected void Page_Load(object sender, EventArgs e) { WebRequest myrequest = WebRequest.Create("http://xxxxx/userface.jpg"); WebResponse myresponse = myrequest.GetResponse(); Stream imgstream = myresponse.

  • Android远程获取图片并本地缓存

    对于客户端--服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量,对应用来说,如果处理不好这个问题,那会让用户很崩溃,不知不觉手机流量就用完了,等用户发现是你的应用消耗掉了他手机流量的话,那么可想而知你的应用将面临什么样的命运. 另外一个问题就是加载速度,如果应用中图片加载速度很慢的话,那么用户同样会等到崩溃. 那么如何处理好图片资源的获取和管理呢? *异步下载 *本地缓存 1.异步下载: 大家都知道,在android应用中UI线程5秒没响应的话就会抛出无响应异

  • Python爬虫实现获取动态gif格式搞笑图片的方法示例

    本文实例讲述了Python爬虫实现获取动态gif格式搞笑图片的方法.分享给大家供大家参考,具体如下: 有时候看到一些喜欢的动图,如果一个个取保存挺麻烦,有的网站还不支持右键保存,因此使用python来获取动态图,就看看就很有意思了 本次爬取的网站是  居然搞笑网 http://www.zbjuran.com/dongtai/list_4_1.html 思路: 获取当前页面内容 查找页面中动图所代表的url地址 保存这个地址内容到本地 如果想爬取多页,就可以加上一个循环条件 代码: #!/usr/

  • php实现高效获取图片尺寸的方法

    本文实例讲述了php实现高效获取图片尺寸的方法.分享给大家供大家参考.具体分析如下: php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸,但是效率是很低的,首先需要获取整个的图片信息,然后再进行操作,下面的例子更科学算法更好,我们一起来看看吧. 方法可以用于快速获取图片尺寸信息,获取JPEG格式图片的尺寸信息,并且不需要下载读取整个图片,经测试这个函数不是对所有JPEG格式的图片都有效. 1.获取JPEG格式图片的尺寸信息,代码如下: 复制代码 代码如下: <?php

  • JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】

    本文实例讲述了JS实现获取图片大小和预览的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he

随机推荐