How can I read the EXIF data from an image taken with an Apple iPhone using C#?
I need the GPS related data.
PS: I know how to read EXIF exc
If you load an image using:
Image image = Image.FromFile(imageName);
The EXIF values are read into the PropertyItems
array on the image.
I found some code for interpreting these tags as EXIF data. I can't remember where I got it from now but I've found a copy here. I don't think that the code as it stands reads the geolocation codes, but this page claims to have a list of all EXIF tags, so you could extend this code.
Tag id 0x8825
is the GPSInfo. The GPS tags are enumerated on this page
The MetadataExtractor library has been available for Java since 2002 and is now fully supported for .NET. It supports Exif GPS data from JPEG files, along with a tonne of other metadata types and file types.
Here are examples of the output from an iPhone 4, iPhone 5 and an iPhone 6.
It's available via NuGet:
PM> Install-Package MetadataExtractor
Then, to access the GPS location, use the following code:
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);
Or to print out every single discovered value:
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);
I would recommend you take a look at the exiflibrary project on Google Code and its associated ExifLibrary for .NET article on Code Project.
It supports over 150 known EXIF tags including 32 GPS related ones. Getting the latitude and longitude is as easy as:
var exif = ExifFile.Read(fileName);
Console.WriteLine(exif.Properties[ExifTag.GPSLatitude]);
Console.WriteLine(exif.Properties[ExifTag.GPSLongitude]);
It even has a neat little demo application with an interactive visualization of the binary data: