c# 获取照片的经纬度和时间的示例代码
作者:gisoracle 时间:2022-03-22 18:21:54
public List<string> GetXYFromPic(String jpgPath)
{
List<string> sXY = new List<string>();
try
{
//载入图片
Image objImage = Image.FromFile(jpgPath);
//取得所有的属性(以PropertyId做排序)
var propertyItems = objImage.PropertyItems.OrderBy(x => x.Id);
foreach (PropertyItem objItem in propertyItems)
{
//只取Id范围为0x0000到0x001e
if (objItem.Id >= 0x0000 && objItem.Id <= 0x001e)
{
switch (objItem.Id)
{
case 0x0002://设置纬度
if (objItem.Value.Length == 24)
{
//degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
//minutes(將byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
//seconds(將byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
double dblGPSLatitude = (((s / 60 + m) / 60) + d);
sXY.Add(dblGPSLatitude.ToString("0.00000000"));
}
break;
case 0x0004: //设置经度
if (objItem.Value.Length == 24)
{
//degrees(将byte[0]~byte[3]转成uint, 除以byte[4]~byte[7]转成的uint)
double d = BitConverter.ToUInt32(objItem.Value, 0) * 1.0d / BitConverter.ToUInt32(objItem.Value, 4);
//minutes(将byte[8]~byte[11]转成uint, 除以byte[12]~byte[15]转成的uint)
double m = BitConverter.ToUInt32(objItem.Value, 8) * 1.0d / BitConverter.ToUInt32(objItem.Value, 12);
//seconds(将byte[16]~byte[19]转成uint, 除以byte[20]~byte[23]转成的uint)
double s = BitConverter.ToUInt32(objItem.Value, 16) * 1.0d / BitConverter.ToUInt32(objItem.Value, 20);
double dblGPSLongitude = (((s / 60 + m) / 60) + d);
sXY.Add(dblGPSLongitude.ToString("0.00000000"));
}
break;
}
}
if (objItem.Id == 0x9003 || objItem.Id == 0x0132)//Id为0x9003表示拍照的时间,0x0132 最后更新时间
{
var propItemValue = objItem.Value;
var dateTimeStr = System.Text.Encoding.ASCII.GetString(propItemValue).Trim('\0');
var dt = DateTime.ParseExact(dateTimeStr, "yyyy:MM:dd HH:mm:ss", CultureInfo.InvariantCulture);
sXY.Add(dt.ToString());//.ToShortDateString()
}
}
objImage.Dispose();
return sXY;
}
catch (Exception ex)
{
//MessageManager.Show(jpgPath + "该图片文件损坏");
//listErrorMessage.Add(jpgPath + "该照片由于照片损坏,因此无法进行导入。");
return sXY;
}
}
来源:https://www.cnblogs.com/gisoracle/p/13746383.html
标签:c#,照片,经纬度,时间
0
投稿
猜你喜欢
C#的正则表达式Regex类使用简明教程
2021-11-16 12:47:32
Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解
2022-01-21 01:12:24
Android中子线程和UI线程通信详解
2023-03-21 00:05:10
Java中Builder模式的实现详解
2022-08-06 15:37:24
SpringBoot绿叶显示yml和端口问题及解决方法
2023-12-09 00:29:13
Java 反射机制详解及实例代码
2023-07-13 15:22:29
Java中Mybatis-Plus使用方式介绍
2021-11-14 05:49:56
C#中datagridview的EditingControlShowing事件用法实例
2021-05-27 23:08:43
Java多态性抽象类与接口细致详解
2022-08-22 00:06:11
C#中Linq的入门教程
2023-12-23 16:20:52
浅谈C#中对引用类型的误解
2021-10-18 12:40:37
Android编程计算函数时间戳的相关方法总结
2023-05-27 18:29:57
C语言数据结构之二叉树的非递归后序遍历算法
2021-12-23 07:10:52
Java BigDecimal中divide方法案例详解
2021-12-31 07:00:29
Java hashCode原理以及与equals()区别联系详解
2023-03-04 15:37:56
eclipse 联想功能设置技巧
2023-03-18 04:11:39
MyBatis中基于别名typeAliases的设置
2022-03-07 22:18:19
Android 活动条ActionBar的详解及实例代码
2021-07-21 13:09:20
android图片处理之让图片变成圆形
2021-08-01 00:29:53
Java如何在PDF中添加ToolTip工具提示
2021-12-31 12:12:53