2010-01-30 16 views

Respuesta

2

Si se carga una imagen usando:

Image image = Image.FromFile(imageName); 

Los valores EXIF ​​se leen en la matriz PropertyItems en el imagen.

Encontré un código para interpretar estas etiquetas como datos EXIF. No recuerdo dónde lo obtuve a partir de ahora, pero encontré una copia here. No creo que el código en su forma actual lea los códigos de geolocalización, pero this page afirma tener una lista de todas las etiquetas EXIF, por lo que podría extender este código.

La identificación de la etiqueta 0x8825 es la información GPS. Las etiquetas GPS se enumeran en this page

+0

gracias, pero parece que el iPhone no usa estas etiquetas. – zunyite

8

Recomendaría que eche un vistazo al proyecto exiflibrary en Google Code y su artículo asociado ExifLibrary for .NET en Code Project.

Admite más de 150 etiquetas EXIF ​​conocidas, incluidas 32 relacionadas con GPS. Obtener la latitud y la longitud es tan fácil como:

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

Incluso tiene una aplicación de demostración poco ordenada con una visualización interactiva de los datos binarios: El biblioteca MetadataExtractor ha estado disponible para Java ExifLibrary demo

+0

Probé la demostración, pero no puedo leer el EXIF ​​de una imagen tomada con un " Apple iPhone " – zunyite

+0

Creo que la demo de Code Project es una versión anterior. Debe intentar compilar la aplicación de demostración con la última versión (v0.9) de Google Code. –

+0

v0.9 no puede extraer los datos GPS EXIF ​​de la imagen de IPhone – zunyite

2

desde 2002 y ahora es totalmente compatible con .NET. Admite datos GPS Exif de archivos JPEG, junto con una tonelada de otros tipos de metadatos y tipos de archivos.

Aquí hay ejemplos de la salida de iPhone 4, iPhone 5 y iPhone 6.

Está disponible a través de NuGet:

PM> Install-Package MetadataExtractor 

Luego, para acceder a la ubicación GPS, utilice el siguiente código:

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); 

O para imprimir cada valor descubierto:

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); 
Cuestiones relacionadas