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

时间:2010-01-30 21:11:34

标签: c# iphone exif

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

我需要GPS相关数据。

PS:除了使用 Apple iPhone

拍摄的图像外,我知道如何阅读EXIF

3 个答案:

答案 0 :(得分:8)

我建议您查看Google代码上的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 demo

答案 1 :(得分:2)

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

Image image = Image.FromFile(imageName);

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

我找到了一些代码,用于将这些标记解释为EXIF数据。我不记得从现在起我从哪里得到它,但我找到了一份副本here。我不认为现有代码会读取地理定位代码,但this page声称拥有所有EXIF代码的列表,因此您可以扩展此代码。

标记ID 0x8825是GPSInfo。 GPS标签在this page

上列举

答案 2 :(得分:2)

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

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

可通过NuGet获取:

PM> Install-Package MetadataExtractor

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

var directories = ImageMetadataReader.ReadMetadata(jpegFilePath);

var gps = directories.OfType<GpsDirectory>().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);