ASP.NET 画图与图像处理-获取照片拍摄日期

作者:vkvi 来源:ITPOW(原创) 日期:2008-9-17

照片的拍摄日期、光圈、曝光时间等这些信息存在文件的头信息中,被称为 EXIF 信息,最初是由日本发明的。

要取这些信息可以用 System.Drawing.Image 的 PropertyItems 对象数组,如果对象中 Id 值为 0x0132(十进制 306),则 Value 就表示为拍照日期,不过这个格式有点怪,其格式为“0000:00:00 00:00:00”,可以看出年月日的分隔也是用的冒号,另外如果相机具有记录拍照日期功能,但没有设定日期,记录的日期值就是“0000:00:00 00:00:00”。

using (System.Drawing.Image image = System.Drawing.Image.FromFile(photoPath))
{
    for (int i = 0; i < image.PropertyItems.Length; i++)
    {
        if (image.PropertyItems[i].Id == 0x0132)
        {
            //拍照日期
            string value = Encoding.ASCII.GetString(image.PropertyItems[i].Value);
            string[] dtParts = value.Split(new string[2] { " ", ":" }, 
                StringSplitOptions.RemoveEmptyEntries);
            if (Convert.ToInt32(dtParts[0]) > 0)
            {
                //有拍照日期
                shootingDate = new DateTime(Convert.ToInt32(dtParts[0]), Convert.ToInt32(dtParts[1]), Convert.ToInt32(dtParts[2]),
                    Convert.ToInt32(dtParts[3]), Convert.ToInt32(dtParts[4]), Convert.ToInt32(dtParts[5]), DateTimeKind.Local);
                break;
            }
        }
    }
}

以下为转载供您参考

如何在.NET下操作图像元 Exif 数据

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://kware.blogbus.com/logs/10871143.html

1. JFIF JPEG 文件交换格式 (JFIF)

JPEG 是一种压缩方案,不是一种文件格式。“JPEG 文件交换格式(JFIF)”是一种文件格式,常用于存储和传输已根据 JPEG 方案压缩的图像。Web 浏览器显示的 JFIF 文件使用 .jpg 扩展名。

可交换图像文件 (EXIF)

EXIF 是一种适用于数码相机拍摄的照片的文件格式。EXIF 文件中含有根据 JPEG 规格压缩的图像。EXIF文件中还包含了有关照片的信息(拍摄日期、快门速度、曝光时间等)和相机信息(制造商、型号等)。

2. NET 如何:读取图像元 Exif 数据

一些图像文件中包含可供您读取以确定图像特征的元数据。例如,数字照片中可能包含可供您读取以确定用于捕获该图像的照相机的品牌和型号的元数据。利用GDI+,可以读取现有的元数据,也可以将新的元数据写入图像文件中。

GDI+ 将单独的元数据段存储在 PropertyItem 对象中。您可读取 Image 对象的 PropertyItems属性以便从某个文件中检索所有的元数据。PropertyItems 属性返回一个 PropertyItem 对象的数组。

在NET中的EXIF属性项操作方法:System.Drawing.Imaging.Image.*

  • public PropertyItem[] PropertyItems {get;}
  • public int[] PropertyIdList {get;}
  • public void RemovePropertyItem(int propid);
  • public PropertyItem GetPropertyItem(int propid);
  • public void SetPropertyItem(PropertyItem propitem);

System.Drawing.Imaging.PropertyItem

PropertyItem 对象具有以下四个属性:Id、Value、Len 和 Type。

1) Id 用于标识元数据项的标记。下表显示一些可赋予 Id 的值。
      十六进制值  说明
      0x0100      图象宽度              0x0101      图象高度
      0x010E      图象描述
      0x010F      设备制造商            0x0110      设备型号
      0x0131      所用软件              0x0132      拍摄时间
      0x013B      作者
      0x0320      图像标题
      0x5090      亮度表                0x5091      色度表
      0x8298      版权声明              0x829A      Exif 曝光时间
      0x9000      EXIF版本              0x9003      原始拍摄时间ExifDTOriginal
      0x927C      厂家备注              0x9286      用户备注

2) Value 数组值。这些值的格式由 Type 属性确定。

3) Len 长度。Value 属性指向的值的数组长度(以字节表示)。

4) Type 类型

Value 属性指向的数组中值的数据类型。下表显示由 Type 属性值指示的格式
      数值  说明
      1     一个 Byte                             2     ASCII 编码的 Byte 对象的数组
      3     16 位整数                             4     32 位整数
      5     包含两个表示有理数的 Byte 对象的数组  6     未使用
      7     未定义                                8     未使用
      9     SLong                                 10    SRational

相关文章