c# 获取照片的经纬度和时间的示例代码

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;
      }

    }

以上就是c# 获取照片的经纬度和时间的示例代码的详细内容,更多关于c# 获取照片的经纬度和时间的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#实现手机拍照并且保存水印照片

    图像采集需要调用摄像头就行拍照操作,网上查了一下资料,需要引用以下3个dll. 看一下运行界面 界面都比较low,主要是功能实现. private void Camera_Load(object sender, EventArgs e) { this.btnSave.Enabled = false; try { borderSize = GetBorderSize(this); captionHeight = GetCaptionHeight(this); //InitStudent("&quo

  • C#实现上传照片到物理路径,并且将地址保存到数据库的小例子

    效果: 思路: 首先,获取图片物理地址,然后进行判断将图片保存到文件夹下,再将图片的信息保存到数据库. 数据库: 复制代码 代码如下: create table image1(ID int identity(1,1) primary key,ImageName varchar(100) ,ImageType varchar(20),ImagePath varchar(200)) 代码: 复制代码 代码如下: <body>    <form id="form1" run

  • 用C#缩小照片上传到各种空间的具体方法

    本人一般也很少上传照片之类的女生喜欢玩的东西,但是偶尔还是要传一传的,为什么?因为现在与各种以前的朋友同学都很少联系,但是只要一发有个人照片的微博或日志便引来各种鲜花鸡蛋. 周末和几个同学去了西涌露营,这么美丽的海滩不上传照片分享着实可惜,可是现在的相机拍出来的照片很大,特别是单反,而咱们的网络带宽又何其可怜,所以先压缩再上传会是非常好的选择,可是呢这么多张照片一张张压缩太麻烦了(鄙人对作图是小白,不懂得使用做图工具),而咱是码农,码农就要用码农的方式,于是乎就想做个程序了. 好了废话了那么多开

  • c# 获取照片的经纬度和时间的示例代码

    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);

  • C/C++实现获取系统时间的示例代码

    目录 概述 示例 易用性封装 概述 C 标准库提供了 time() 函数与 localtime() 函数可以获取到当前系统的日历时间,但 time() 函数精度只能到秒级,如果需要更高精度的系统时间需要使用 gettimeofday() 函数,精度达到微秒级. #include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz); tv 参数是一个 struct timeval 结构体(同样是在 <

  • java 格式化时间的示例代码

    package jkcs; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class jdcs { public static void main(String[] args) th

  • Python调用百度根据经纬度查询地址的示例代码

    如下所示: def locatebyLatLng(lat, lng, pois=0): ''' 根据经纬度查询地址 ''' items = {'location': str(lat) + ',' + str(lng), 'ak': '你自己申请的百度ak', 'output': 'json'} res = requests.get('http://api.map.baidu.com/geocoder/v2/', params=items) result = res.json() print(re

  • Mybatis-plus实现主键自增和自动注入时间的示例代码

    mybatis-plus依赖导入 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency> 建议使用3.3.0后的版本. 导入mybatis-plus就不用导入mybatis了,冲突! 连接数据库 sp

  • C/C++ 获取自身IP与域名片段的示例代码

    判断大端序小端序: 通常情况下,数值在内存中存储的方式有两种,一种是大尾字节序,另一种是小尾,比如0x01020304这样一个数值,如果用大尾方式存储,其存储方式为01 02 03 04而用小尾方式存储则是04 03 02 01,一般Windows操作系统兼容的CPU为小尾方式,而UNIX操作系统所兼容的CPU多为大尾方式,通过使用两种方法即可判断大小纬. #include <stdio.h> #include <stdlib.h> #include <WinSock2.h&

  • Android开发获取当前系统日期和时间功能示例

    本文实例讲述了Android开发获取当前系统日期和时间功能.分享给大家供大家参考,具体如下: 安卓 获得系统时间 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //创建线性布局管理器 LinearLayout layout = new Li

  • Flutter中获取屏幕及Widget的宽高示例代码

    前言 我们平时在开发中的过程中通常都会获取屏幕或者 widget 的宽高用来做一些事情,在 Flutter 中,我们有两种方法来获取 widget 的宽高. MediaQuery 一般情况下,我们会使用如下方式去获取 widget 的宽高: final size =MediaQuery.of(context).size; final width =size.width; final height =size.height; 但是如果不注意,这种写法很容易报错,例如下面的写法就会报错: impor

  • js中的时间转换—毫秒转换成日期时间的示例代码

    js毫秒时间转换成日期时间 复制代码 代码如下: var oldTime = (new Date("2011/11/11 20:10:10")).getTime(); //得到毫秒数 大多数是用毫秒数除以365*24*60*60&1000,这么转回去,这种方法转换太过复杂,年月日,时分秒都要不同的方法获取,而且有的年份有366天,有的365天,这么算起来就太过复杂了. 后面自己试了一个方法,居然成功了 复制代码 代码如下: var oldTime = (new Date(&qu

  • javascript页面动态显示时间变化示例代码

    复制代码 代码如下: <html> <head> <title></title> <script> function getDateDemo(){ /* //声明时间 var date = new Date(); alert(date);//当前时间 alert(date.toLocaleString());//转化为本地时间 alert(date.getFullYear());//显示年份 alert(date.getMonth() + 1);

随机推荐