获取照片的拍摄日期
整理照片是个麻烦事情。这几天有一批照片需要整理。需要按照拍摄日期进行重命名。经过文件复制之后,文件本身的日期早已面目全非,但是现在的相机的好处是会自动记录照片的很多独立的详细信息,比如照片的拍摄日期。那么怎么才能取到这些信息呢?一番查找,知道这些信息好像是叫做“EXIF”的格式信息。这个网站有它们的详细说明,基本上,每项信息包括ID,数值以及类型和长度等信息。这里我只关心拍摄日期。ID代表数据名称,比如16进制0x0132, 0x9003, 0x9004应该就代表拍摄日期,但具体区别我还不是很清楚,我怎么知道的那个值?从上面提到的那个网站里查到的,当然里面内容很长,看起来也有些复杂,我只是找到了它,然后一试才知道是正确的。知道了ID,那么对应的值是怎样的呢? .NET Framework的Image类已经提供了PropertyItems集合,帮我们把这些信息按照ID建立了数组,而每个ID对应的值则是byte[],也就是说,具体的可读内容,需要根据具体的数据类型自己去转换了。对于拍摄日期,谢天谢地,这byte[]不难解析,直接转换为ASCII字符串就是。
这是代码:
Image img = Image.FromFile(@"C:\Users\Protoss\Pictures\WP_000028.jpg");
System.Drawing.Imaging.PropertyItem[] items = img.PropertyItems;
string DateToken = System.Text.Encoding.ASCII.GetString(items.First(i => i.Id == 0x9003 || i.Id == 0x9004 || i.Id == 0x0132).Value);
理解的越多,需要记忆的就越少