【发布时间】:2020-06-24 01:37:01
【问题描述】:
我正在开发一个允许使用 ASP.NET C# 将图像上传到服务器的系统。我正在处理图像,一切都很好。我设法找到一种方法来读取 Date Created EXIF 数据并将其解析为 DateTime。这也很好用。
我现在正尝试从 EXIF 读取 GPS 数据。我想捕捉纬度和经度的数字。
我将此列表用作对 EXIF 数据的引用(使用属性项的数字)http://www.exiv2.org/tags.html
这是捕获创建日期的方法(有效)。
public DateTime GetDateTaken(Image targetImg)
{
DateTime dtaken;
try
{
//Property Item 306 corresponds to the Date Taken
PropertyItem propItem = targetImg.GetPropertyItem(0x0132);
//Convert date taken metadata to a DateTime object
string sdate = Encoding.UTF8.GetString(propItem.Value).Trim();
string secondhalf = sdate.Substring(sdate.IndexOf(" "), (sdate.Length - sdate.IndexOf(" ")));
string firsthalf = sdate.Substring(0, 10);
firsthalf = firsthalf.Replace(":", "-");
sdate = firsthalf + secondhalf;
dtaken = DateTime.Parse(sdate);
}
catch
{
dtaken = DateTime.Parse("1956-01-01 00:00:00.000");
}
return dtaken;
}
下面是我对 GPS 做同样的尝试..
public float GetLatitude(Image targetImg)
{
float dtaken;
try
{
//Property Item 0x0002 corresponds to the Date Taken
PropertyItem propItem = targetImg.GetPropertyItem(2);
//Convert date taken metadata to a DateTime object
string sdate = Encoding.UTF8.GetString(propItem.Value).Trim();
dtaken = float.Parse(sdate);
}
catch
{
dtaken = 0;
}
return dtaken;
}
进入 sdate 的值为 "5\0\0\0\0\0\0l\t\0\0d\0\0\0\0\0\0\0\0\0 \0"
这是来自带有 GPS EXIF 数据的 iPhone 4 拍摄的图像。
我知道有一些课程可以做到这一点,但我更愿意自己编写 - 不过我愿意接受建议 :-)
提前致谢。
【问题讨论】:
-
您是否通过在其他软件中读取图像来确保该图像被地理标记?地理标记(嵌入 EXIF 数据)可以在 iPhone 中禁用(这是合乎逻辑的)。那么,您是否 100% 确定在拍摄图像时启用了该功能?而且,如果启用,您确定手机在拍摄照片时位于某个位置(而不是某个房间内)吗?手机必须从卫星接收信号。
-
嗨 Sarwar,我刚刚在上传前检查了图像,它确实包含 GPS 信息。我查看了文件的属性详细信息,它们在那里,纬度、经度和高度。
-
如果您决定放弃,或者想查看示例源代码。 MetaDataSpr 对我很有帮助。
标签: c# gps latitude-longitude exif