c# exif photography

Cómo obtener los datos EXIF de un archivo usando C#



photography (7)

Me gustaría escribir un pequeño programa en C # que pase por mis fotos JPEG y, por ejemplo, las clasifique en carpetas fechadas (usando MIS convenciones de citas, maldición ...).

¿Alguien sabe una manera relativamente fácil de obtener los datos EXIF ​​como la fecha y la hora o la exposición de forma programática? ¡Gracias!



Como se sugirió, puede usar una biblioteca de terceros, o hacerlo manualmente (lo cual no es mucho trabajo), pero la más simple y la más flexible es tal vez usar la funcionalidad incorporada en .NET. Para más ver:

Digo "es el más flexible" porque .NET no intenta interpretar o unir los datos de ninguna manera. Para cada EXIF ​​básicamente obtienes una matriz de bytes. Esto puede ser bueno o malo dependiendo de cuánto control realmente desee.

Además, debo señalar que la lista de propiedades en realidad no se corresponde directamente con los valores EXIF. EXIF se almacena en varias tablas con identificaciones superpuestas, pero .NET pone todo en una lista y redefine las ID de algunos elementos. Pero siempre y cuando no te importen las ID EXIF ​​precisas, deberías estar bien con la asignación de .NET.


La clase de imagen tiene propiedades PropertyItems y PropertyIdList. Puedes usarlos.


La herramienta de línea de comandos ExifTool de Phil Harvey funciona con docenas de formatos de imágenes, incluidos muchos formatos RAW patentados, y puede manipular una variedad de formatos de metadatos, incluidos EXIF, GPS, IPTC, XMP, JFIF.

Aplicación muy fácil de usar, liviana e impresionante.


Mira este extractor de metadatos . Está escrito en Java pero también ha sido portado a C #. He utilizado la versión de Java para escribir una pequeña utilidad para cambiar el nombre de mis archivos jpeg en función de las etiquetas de fecha y modelo. Muy fácil de usar

EDIT metadata-extractor también es compatible con .NET. Es una biblioteca muy rápida y simple para acceder a los metadatos de imágenes y videos.

Es totalmente compatible con Exif, IPTC, XMP y muchos otros tipos de metadatos de tipos de archivos, incluidos JPEG, PNG, GIF, PNG, ICO, WebP, PSD, ...

var directories = ImageMetadataReader.ReadMetadata(imagePath); // print out all metadata foreach (var directory in directories) foreach (var tag in directory.Tags) Console.WriteLine($"{directory.Name} - {tag.Name} = {tag.Description}"); // access the date time var subIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault(); var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime);

Está disponible a través de NuGet y el código está en GitHub .


Obtener datos EXIF ​​de una imagen JPEG implica:

  1. Buscando en los marcadores JPEG que menciona el comienzo de los datos EXIF ​​,. por ejemplo, normalmente oxFFE1 es el marcador insertado al codificar los datos EXIF, que es un segmento APPlication, donde van los datos EXIF.
  2. Analiza todos los datos de decir 0xFFE1 a 0xFFE2. Esta información sería una secuencia de bytes, en el archivo codificado JPEG.
  3. El equivalente ASCII de estos bytes contendría información diversa relacionada con la Fecha de la imagen, el Nombre del modelo de la cámara, la Exposición, etc.

Puede usar TagLib# que utilizan aplicaciones como F-Spot . Además de Exif, leerá una buena cantidad de formatos de metadatos para imagen, audio y video.

También me gusta ExifUtils API pero tiene errores y no se desarrolla activamente.