我正忙着从我的JPEG中读取EXIF数据。我觉得这很容易做到。
到目前为止,我已经为我家的在线图片库完成了以下步骤(使用C#/ ASP.Net 3.5):
我想从原始JPEG图像中提取纬度和经度,然后在插入文件名和类别ID的同一个proc中将这些值插入到我的数据库中(步骤#5)。我需要这些值才能使用Google Maps API。最简单的方法是什么?
更新
ExifLib看起来很棒,但是当我执行以下操作时:
double d;
ExifReader er = new ExifReader(sFileName);
er.GetTagValue<double>(ExifTags.GPSLatitude, out d);
我在最后一行收到此错误:
指定的演员表无效。
有什么建议吗?
答案 0 :(得分: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);
}
}
输出:
The picture was taken at 76.8593333333333,39.077
答案 1 :(得分:1)
从图像中检索GPS元数据的另一个选择是使用MetadataExtractor库。它可用on NuGet。它支持JPEG文件中的Exif GPS数据,以及一系列其他元数据类型和文件类型。
要访问GPS位置,请使用以下代码:
var directories = ImageMetadataReader.ReadMetadata(jpegFilePath);
var gps = directories.OfType<GpsDirectory>().FirstOrDefault();
if (gps != null)
{
var location = gps.GetGeoLocation();
if (location != null)
Console.WriteLine("Lat {0} Lng {1}", location.Latitude, location.Longitude);
}
此处的示例输出来自iPhone 6。