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

要获取照片的经纬度和时间,我们可以使用C#语言中的ExifLib库来实现。下面我将为大家详细讲解如何使用ExifLib库来获取照片的经纬度和时间。

准备工作

在使用ExifLib库之前,需要先添加对该库的引用。可以通过NuGet包管理器来添加引用。具体步骤如下:

  1. 在Visual Studio中打开你的项目。

  2. 在“解决方案资源管理器”窗口中右击项目名称,选择“管理NuGet程序包”。

  3. 在“NuGet程序包管理器”窗口中搜索“ExifLib”,然后点击“安装”按钮进行安装。

安装完成后,我们可以开始编写代码来获取照片的经纬度和时间了。

示例说明

示例一:获取单张照片的经纬度和时间

下面的示例代码演示了如何获取单张照片的经纬度和时间:

using System;
using System.IO;
using ExifLib;

namespace GetPhotoInfo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 照片绝对路径
            string photoPath = @"D:\Pictures\IMG001.jpg";

            using (ExifReader reader = new ExifReader(photoPath))
            {
                // 获取经度
                double[] longitude = GetLongitude(reader);
                // 获取纬度
                double[] latitude = GetLatitude(reader);
                // 获取拍摄时间
                DateTime datePictureTaken;
                if (reader.GetTagValue<DateTime>(ExifTags.DateTimeDigitized, out datePictureTaken))
                {
                    Console.WriteLine("照片拍摄时间:" + datePictureTaken.ToString());
                }
            }

            // 防止Console窗口关闭
            Console.ReadLine();
        }

        private static double[] GetLongitude(ExifReader reader)
        {
            double[] longitude = null;
            if (reader.GetTagValue<double[]>(ExifTags.GPSLongitude, out longitude))
            {
                Console.WriteLine("经度:" + LongitudeToString(longitude));
            }
            return longitude;
        }

        private static double[] GetLatitude(ExifReader reader)
        {
            double[] latitude = null;
            if (reader.GetTagValue<double[]>(ExifTags.GPSLatitude, out latitude))
            {
                Console.WriteLine("纬度:" + LatitudeToString(latitude));
            }
            return latitude;
        }

        private static string LongitudeToString(double[] longitude)
        {
            string format = "{0}°{1}'{2}\"{3}";
            string direction = longitude[3] > 0 ? "E" : "W";
            double degree = Math.Abs(longitude[0]);
            double minute = Math.Abs(longitude[1]);
            double second = Math.Abs(longitude[2]);
            return string.Format(format, degree, minute, second, direction);
        }

        private static string LatitudeToString(double[] latitude)
        {
            string format = "{0}°{1}'{2}\"{3}";
            string direction = latitude[3] > 0 ? "N" : "S";
            double degree = Math.Abs(latitude[0]);
            double minute = Math.Abs(latitude[1]);
            double second = Math.Abs(latitude[2]);
            return string.Format(format, degree, minute, second, direction);
        }
    }
}

如上述代码所示,我们首先通过ExifReader类读取照片的Exif信息,然后通过GetLongitude()和GetLatitude()方法分别获取经度和纬度信息。最后,我们通过GetTagValue()方法获取照片的拍摄时间信息。

示例二:获取文件夹下所有照片的经纬度和时间

下面的示例代码演示了如何获取文件夹下所有照片的经纬度和时间:

using System;
using System.IO;
using ExifLib;

namespace GetPhotoInfo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 照片所在文件夹路径
            string photoFolder = @"D:\Pictures";

            // 遍历该文件夹下的所有文件
            foreach (string file in Directory.GetFiles(photoFolder))
            {
                // 判断是否为照片文件
                if (IsPhoto(file))
                {
                    using (ExifReader reader = new ExifReader(file))
                    {
                        // 获取经度
                        double[] longitude = GetLongitude(reader);
                        // 获取纬度
                        double[] latitude = GetLatitude(reader);
                        // 获取拍摄时间
                        DateTime datePictureTaken;
                        if (reader.GetTagValue<DateTime>(ExifTags.DateTimeDigitized, out datePictureTaken))
                        {
                            Console.WriteLine("照片路径:" + file);
                            Console.WriteLine("照片拍摄时间:" + datePictureTaken.ToString());
                        }
                    }
                }
            }

            // 防止Console窗口关闭
            Console.ReadLine();
        }

        ...
    }
}

如上述代码所示,我们首先通过Directory.GetFiles()获取文件夹下所有文件,然后通过IsPhoto()方法判断该文件是否为照片文件。如果是照片文件,我们就使用ExifReader类读取该照片的Exif信息,然后获取经度、纬度和拍摄时间信息。最后,我们输出该照片的路径和拍摄时间信息。

总之,使用ExifLib库可以方便地获取照片的各种信息,开发人员可以根据自己的需求进行调用和扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 获取照片的经纬度和时间的示例代码 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • WPF 调用 ECAN 发送数据会阻塞的解决过程

    接了个活, 写个 WPF 上位机用 PCAN 或 ECAN 和单片机通讯, 读取传感器数据. 程序逻辑是 : 选择连接类型 PCAN / ECAN, 选择波特率, 选择通道号, 输入查询间隔, 连接设备. 然后开启一个后台线程循环发送读取指令逐个读取传感器数据. 使用 PCAN 时, 连接和收发数据都正常, 但改为 ECAN 连接后, 有很大几率卡在 SDK…

    C# 2023年5月6日
    00
  • C#11新特性预览及使用介绍

    C# 11新特性预览及使用介绍 介绍 C# 11新特性加入了一些新的语言特性,使得C#语言更具表达力和灵活性。在本文中,我们将介绍C# 11的一些新功能并演示如何使用它们。 新特性 1. 本地函数的支持 C# 10已经支持了本地函数的语法,但在C# 11中,我们可以在本地函数中使用“拓展方法”。具体而言,我们可以在本地函数中使用类的拓展方法。 例如,我们需要…

    C# 2023年5月14日
    00
  • C# 如何调用SAP RFC

    调用SAP系统的功能,需要使用SAP提供的RFC接口,而C#语言则可以通过SAP .Net Connector来实现RFC调用操作。 以下是调用SAP RFC的详细攻略: 步骤一:安装SAP .Net Connector 访问SAP服务市场网站(https://support.sap.com)下载并安装SAP .Net Connector,这是使用C#调用R…

    C# 2023年6月6日
    00
  • Web API中使用Autofac实现依赖注入

    下面我将为你详细讲解如何在Web API中使用Autofac实现依赖注入的攻略。 1. 安装Autofac 首先,我们需要安装Autofac,这可以通过NuGet轻松完成。在Visual Studio中,右键单击项目,选择“Manage NuGet Packages”,然后搜索并安装Autofac。 2. 编写服务实现类 在进行依赖注入之前,我们需要编写服务…

    C# 2023年6月3日
    00
  • DataReader、DataSet、DataAdapter和DataView使用介绍

    DataReader、DataSet、DataAdapter和DataView是数据访问中常用的几个对象,下面我会详细介绍它们的作用和使用方法。 一、DataReader DataReader是一种只读的、前向的数据流,用于对数据库进行查询操作。它可以一行一行地读取查询结果,不支持对数据进行修改,适用于大数据量查询,可以最大程度减少内存占用。使用DataRe…

    C# 2023年6月6日
    00
  • 在C#和MySQL中存取中文字符时避免乱码的方法

    对于在C#和MySQL中存取中文字符避免乱码的方法,我可以提供以下完整攻略: 1. 设置MySQL字符集 MySQL默认使用的字符集是latin1,这种字符集不支持中文,所以需要设置MySQL字符集为支持中文的utf8字符集。在连接MySQL数据库之前,需要执行以下语句设置字符集: SET NAMES ‘utf8’; // 设置字符集为utf8 这条语句可以…

    C# 2023年5月15日
    00
  • C#设置Word文本框中改变文字方向的方法

    下面是“C#设置Word文本框中改变文字方向的方法”的详细攻略。 一、背景说明 在进行Word文档的编写时,有时需要设置文本框中文字的方向。一般情况下,默认情况下文字方向是水平方向,如果我们想将文本框中文字方向改为垂直方向,就需要进行相关的设置。 二、文字方向的设置方法 在C#代码中,我们可以通过使用Microsoft.Office.Interop.Word…

    C# 2023年6月3日
    00
  • c# in depth的泛型实现实例代码

    下面是关于”c#InDepth的泛型实现实例代码”的完整攻略。 1. 什么是c#InDepth? c#InDepth 是一本经典的 c# 高级编程书籍,由 Jon Skeet 所著。该书有关于泛型编程的讲解以及有许多泛型相关的实例代码。这些代码是泛型编程的经典案例,非常值得学习和掌握。 2. 泛型实现的实例代码 2.1 泛型列表实现 public class…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部