Pregunta

Me gustaría escribir un pequeño programa en C# que revise mis fotos jpeg y, por ejemplo, las clasifique en carpetas fechadas (usando MIS convenciones de citas, maldita sea...).

¿Alguien conoce una manera relativamente fácil de acceder a los datos EXIF, como la fecha y hora o la exposición, mediante programación?¡Gracias!

¿Fue útil?

Solución

Mira esto 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 según la fecha y las etiquetas del modelo.Muy fácil de usar.


EDITAR extractor de metadatos También es compatible con .NET.Es una biblioteca muy rápida y sencilla para acceder a metadatos de imágenes y vídeos.

Es totalmente compatible con Exif, así como con 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 El código está en GitHub..

Otros consejos

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

Digo "es el más flexible" porque .NET no intenta interpretar ni fusionar 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 desees.

Además, debo señalar que la lista de propiedades, de hecho, no corresponde directamente a los valores EXIF.EXIF en sí se almacena en varias tablas con ID superpuestas, pero .NET pone todo en una lista y redefine las ID de algunos elementos.Pero mientras no le importen los ID EXIF ​​​​precisos, debería estar bien con el mapeo .NET.

Aquí hay un enlace a otro. pregunta SO similar, que tiene una respuesta que apunta a este buen artículo sobre "Lectura, escritura y metadatos fotográficos" en la red.

Puedes usar EtiquetaLib# que es utilizado por aplicaciones como Punto F.Además de Exif, leerá una buena cantidad de formatos de metadatos de imagen, audio y vídeo.

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

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

Obtener datos EXIF ​​de una imagen JPEG implica:

  1. Buscando los marcadores JPEG que mencionan el comienzo de los datos EXIF.p.ej.normalmente oxFFE1 es el marcador insertado al codificar datos EXIF, que es un segmento de APLICACIÓN, donde van los datos EXIF.
  2. Analice todos los datos, por ejemplo, de 0xFFE1 a 0xFFE2.Estos datos serían un flujo de bytes, en el archivo codificado JPEG.
  3. El equivalente ASCII de estos bytes contendría diversa información relacionada con la fecha de la imagen, el nombre del modelo de la cámara, la exposición, etc.

La herramienta de línea de comando ExifTool de Phil Harvey funciona con docenas de formatos de imágenes, incluidos muchos formatos RAW propietarios, 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top