如何使用C#从使用 Apple iPhone 拍摄的图像中读取EXIF数据?
我需要GPS相关数据。
PS:除了使用 Apple iPhone
拍摄的图像外,我知道如何阅读EXIF答案 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]);
它甚至还有一个简洁的小型演示应用程序,它具有二进制数据的交互式可视化:
答案 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 4,iPhone 5和iPhone 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);