如何从Apple iPhone拍摄的图像中读取EXIF数据

如何从使用C#的Apple iPhone拍摄的图像中读取EXIF数据?

我需要GPS相关数据。

PS:除了使用Apple iPhone拍摄的图像外,我知道如何阅读EXIF

我建议你看一下关于Code Code的Google Code上的exiflibrary项目及其相关的ExifLibrary for .NET文章。

它支持150多种已知的EXIF标签,包括32种GPS相关标签。 获得经度和经度就像:

var exif = ExifFile.Read(fileName); Console.WriteLine(exif.Properties[ExifTag.GPSLatitude]); Console.WriteLine(exif.Properties[ExifTag.GPSLongitude]); 

它甚至还有一个简洁的小型演示应用程序,它具有二进制数据的交互式可视化: ExifLibrary演示

如果您使用以下方式加载图像:

 Image image = Image.FromFile(imageName); 

EXIF值将读入图像上的PropertyItems数组。

我发现了一些代码用于将这些标记解释为EXIF数据。 我不记得从现在开始我在哪里,但我在这里找到了一份副本。 我不认为现有代码会读取地理位置代码,但此页面声称有一个所有EXIF标记的列表,因此您可以扩展此代码。

标签ID 0x8825是GPSInfo。 GPS标签在此页面上列举

MetadataExtractor库自2002年起可用于Java,现在完全支持.NET。 它支持JPEG文件中的Exif GPS数据,以及一系列其他元数据类型和文件类型。

以下是iPhone 4 , iPhone 5和iPhone 6的输出示例。

它可以通过NuGet获得:

 PM> Install-Package MetadataExtractor 

然后,要访问GPS位置,请使用以下代码:

 var directories = ImageMetadataReader.ReadMetadata(jpegFilePath); var gps = directories.OfType().FirstOrDefault(); var location = gps?.GetGeoLocation(); if (location != null) Console.WriteLine("Lat {0} Lng {1}", location.Latitude, location.Longitude); 

或者打印出每个发现的值:

 var lines = from directory in directories from tag in directory.Tags select $"{directory.Name}: {tag.TagName} = {tag.Description}"; foreach (var line in lines) Console.WriteLine(line);