从JPEG中提取EXIF

Yoa*_*oav 5 .net c# asp.net exif exiflib

我正忙着从我的JPEG中读取EXIF数据.我觉得这很容易做到.

到目前为止,我已经为我家人的在线图片库完成了以下步骤(使用C#/ ASP.Net 3.5):

  1. 上传包含JPEG的ZIP文件(来自我的iPhone 4)
  2. 使用首选命名约定重命名ZIP文件中的JPEG
  3. 将JPEG文件从ZIP文件解压缩到图像文件夹
  4. 调整图像大小以用于各种用途(例如缩略图等)
  5. 将文件名和选定的类别ID保存到SQL Server,以便我可以将这两者用于显示目的

我想从原始JPEG图像中提取纬度和经度,然后在插入文件名和类别ID的同一个proc中将这些值插入到我的数据库中(步骤#5).我需要这些值才能使用Google Maps API.最简单的方法是什么?

更新:

ExifLib看起来很棒,但是当我执行以下操作时:

double d; 
ExifReader er = new ExifReader(sFileName); 
er.GetTagValue<double>(ExifTags.GPSLatitude, out d); 
Run Code Online (Sandbox Code Playgroud)

我在最后一行收到此错误:

指定演员表无效.

有什么建议?

Orw*_*ile 8

为了将所有答案放在一起,这是完整的解决方案.

using (ExifReader reader = new ExifReader(e.Target))
{
    Double[] GpsLongArray;
    Double[] GpsLatArray;
    Double GpsLongDouble;
    Double GpsLatDouble;

    if (reader.GetTagValue<Double[]>(ExifTags.GPSLongitude, out GpsLongArray) 
        && reader.GetTagValue<Double[]>(ExifTags.GPSLatitude, out GpsLatArray))
    {
        GpsLongDouble = GpsLongArray[0] + GpsLongArray[1] / 60 + GpsLongArray[2] / 3600;
        GpsLatDouble  = GpsLatArray[0]  + GpsLatArray[1]  / 60 + GpsLatArray[2]  / 3600;

        Console.WriteLine("The picture was taken at {0},{1}", GpsLongDouble, GpsLatDouble);

    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

    The picture was taken at 76.8593333333333,39.077
Run Code Online (Sandbox Code Playgroud)

  • 你必须考虑到ExifTags.GPSLongitudeRef,ExifTags.GPSLatitudeRef,否则你会发现自己在中国而不是加利福尼亚. (2认同)