木子屋 Dnawo's BLOG

C#获取图像Exif信息

👤 dnawo 📅 2010-01-13 👁 5840 👍 0 💬 0 🔄 本站原创
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;

namespace Console_Application
{
	class Program
	{
		public static void Main(string[] args)
		{
			Dictionary<string,string> exif = new Dictionary<string,string>();
			Image image = Image.FromFile(@"e:\www\test.jpg");
			PropertyItem[] properties = image.PropertyItems;
			foreach(PropertyItem property in properties)
			{
				switch(property.Id)
				{
					//Exif
					case 0x010E:
					exif["ImageTitle"] = ASCIIToString(property.Value);
						break;
					case 0x010F:
						exif["Make"] = ASCIIToString(property.Value);
						break;
					case 0x0110:
						exif["Model"] = ASCIIToString(property.Value);
						break;
					case 0x0112:
						exif["Orientation"] = ShortToString(property.Value,0);
						break;
					case 0x011A:
						exif["XResolution"] = RationalToSingle(property.Value,0);
						break;
					case 0x011B:
						exif["YResolution"] = RationalToSingle(property.Value,0);
						break;
					case 0x0128:
						exif["ResolutionUnit"] = ShortToString(property.Value,0);
						break;
					case 0x0131:
						exif["Software"] = ASCIIToString(property.Value);
						break;
					case 0x0132:
						exif["DateTime"] = ASCIIToString(property.Value);
						break;
					//GPS
					case 0x0002:
						exif["GPSLatitude"] = string.Format("{0}°{1}′{2}″",
						                                    RationalToSingle(property.Value,0),
						                                    RationalToSingle(property.Value,8),
						                                    RationalToSingle(property.Value,16)
						                                   );
						break;
					case 0x0004:
						exif["GPSLongitude"] = string.Format("{0}°{1}′{2}″",
						                                    RationalToSingle(property.Value,0),
						                                    RationalToSingle(property.Value,8),
						                                    RationalToSingle(property.Value,16)
						                                   );
						break;
					case 0x0006:
						exif["GPSAltitude"] = RationalToSingle(property.Value,0);
						break;
				}
			}
			foreach(KeyValuePair<string, string> kvp in exif)
				Console.WriteLine(kvp.Key + ": " + kvp.Value);

			Console.ReadKey(true);
		}
		
		//Method
		static string ByteToString(byte[] b,int startindex)
		{
			if(startindex+1<=b.Length)
				return ((char)b[startindex]).ToString();
			else
				return string.Empty;
		}
		static string ShortToString(byte[] b,int startindex)
		{
			if(startindex+2<=b.Length)
				return BitConverter.ToInt16(b,startindex).ToString();
			else
				return string.Empty;
		}
		static string RationalToSingle(byte[] b,int startindex)
		{
			if(startindex+8<=b.Length)
				return (BitConverter.ToSingle(b,startindex)/BitConverter.ToSingle(b,startindex+4)).ToString();
			else
				return string.Empty;
		}
		static string ASCIIToString(byte[] b)
		{
			return Encoding.ASCII.GetString(b);
		}
	}

}

参考资料

·http://msdn.microsoft.com/zh-cn/library/system.drawing.imaging.propertyitem.id.aspx

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 PlatformNotSupportedException: 此… 下一篇 → C#读取JPG图像Exif信息类