要获取照片的经纬度和时间,我们可以使用C#语言中的ExifLib库来实现。下面我将为大家详细讲解如何使用ExifLib库来获取照片的经纬度和时间。
准备工作
在使用ExifLib库之前,需要先添加对该库的引用。可以通过NuGet包管理器来添加引用。具体步骤如下:
-
在Visual Studio中打开你的项目。
-
在“解决方案资源管理器”窗口中右击项目名称,选择“管理NuGet程序包”。
-
在“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技术站