Me gustaría escribir un pequeño programa en C # que revise mis fotos jpeg y, por ejemplo, las clasifique en carpetas con fecha (usando MIS convenciones de citas, maldita sea ...).
¿Alguien conoce una forma relativamente fácil de obtener los datos EXIF, como Fecha y hora o Exposición, mediante programación? ¡Gracias!
c#
exif
photography
Joel en Gö
fuente
fuente
Respuestas:
Consulte este extractor de metadatos .
Está escrito en Java, pero también se ha adaptado a C #.He usado la versión de Java para escribir una pequeña utilidad para cambiar el nombre de mis archivos jpeg según las etiquetas de fecha y modelo. Muy facil de usar.EDIT metadata-extractor también es compatible con .NET. Es una biblioteca muy rápida y sencilla para acceder a metadatos de imágenes y videos.
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 código está en GitHub .
fuente
Orientation
etiqueta en cada imagen que normalmente es un número mágico, pero esta biblioteca le indica la rotación (es decir,Rotate 180
oRotate 90 CCW
).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:
Propiedad System.Drawing.Image.PropertyItems
System.Drawing.Imaging.PropertyItem ( clase)
Cómo: leer metadatos de imágenes
Digo "es el más flexible" porque .NET no intenta interpretar o 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 desee realmente.
Además, debo señalar que la lista de propiedades no corresponde directamente a los valores EXIF. EXIF en sí mismo se almacena en varias tablas con ID superpuestos, pero .NET pone todo en una lista y redefine las ID de algunos elementos. Pero siempre que no le interesen los ID EXIF precisos, debería estar bien con el mapeo .NET.
Editar: Es posible hacerlo sin cargar la imagen completa siguiendo esta respuesta: https://stackoverflow.com/a/552642/2097240
fuente
PropertyItems
sin cargar la imagen completa : stackoverflow.com/a/552642Aquí hay un enlace a otra pregunta SO similar , que tiene una respuesta que apunta a este buen artículo sobre "Lectura, escritura y metadatos fotográficos" en .Net.
fuente
Puede utilizar 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 la API de ExifUtils, pero tiene errores y no se desarrolla activamente.
fuente
La clase Image tiene propiedades PropertyItems y PropertyIdList. Puedes usarlos.
fuente
Obtener datos EXIF de una imagen JPEG implica:
fuente
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 impresionante, ligera y muy fácil de usar.
fuente
Recientemente, utilicé esta API de metadatos .NET . También escribí una publicación de blog al respecto, que muestra cómo leer, actualizar y eliminar los datos EXIF de las imágenes usando C #.
using (Metadata metadata = new Metadata("image.jpg")) { IExif root = metadata.GetRootPackage() as IExif; if (root != null && root.ExifPackage != null) { Console.WriteLine(root.ExifPackage.DateTime); } }
fuente