2011-08-19 17 views
7

He buscado sobre este tema pero los únicos hilos adecuados que puedo encontrar están fechados en 2008, de ahí mi nueva pregunta.Biblioteca EXIF ​​para el framework .NET 4.0

Estoy buscando desarrollar un programa usando el lenguaje C# .Net 4.0. El objetivo de mi programa será extraer información EXIF ​​de jpegs (fabricante, modelo, información de geolocalización, etc.) y luego llenarla en una base de datos del servidor MySql/Sql.

¿Alguien puede recomendar alguna buena biblioteca que pueda ser adecuada para este proyecto? También buscaría los números de serie de la cámara (sé que esto varía de un fabricante a otro), pero si alguien sabe de alguna biblioteca existente que aborde esto, sería de gran ayuda.

Gracias y disfrutar el fin de semana

+0

está buscando bibliotecas libres o comercial? – Yahia

+0

Estoy buscando ambos. Todo depende de los costos de los comerciales, pero si puede recomendar alguno, me complace echarles un vistazo. Si hay otros gratuitos que hacen un buen trabajo, entonces los prefiero :) – thefragileomen

+0

No probé ninguno gratis ... pero eche un vistazo a LeadTools o GdPicutre ... esp. la información específica de la cámara será una pesadilla, ya que cambia muy a menudo, por lo que necesita actualizar a menudo ... – Yahia

Respuesta

4

Para obtener información básica EXIF ​​(fabricante, modelo de la cámara, el tiempo, la abertura, etc.), me gustaría ver la clase System.Drawing.Image - en particular los PropertiesItems colección.

Existen desventajas en esta clase. Requiere cargar toda la imagen en la memoria antes de recuperar la información EXIF ​​(es decir, es algo lenta). Tampoco maneja todos los campos específicos del proveedor que no son uniformes de una cámara a otra.

Image.PropertyItems

MSDN: Reading Image Metadata

PropertyItem.Id

lo he utilizado con gran éxito para recopilar información acerca de mi colección de fotos (decenas de miles de fotos tomadas con una docena de diferentes cámaras digitales de diferentes marcas y modelos).

+5

Yo también he usado esto para la información EXIF ​​y encontré que funciona bien. ¿Sabía que hay una forma incorporada de omitir la carga de la imagen y obtener solo los metadatos? ¡Mejora de velocidad masiva! Debes usar 'Image.FromFile (Stream, false, false)' ... Ver más información aquí: http://msdn.microsoft.com/en-us/library/21zw9ah6.aspx –

+1

Si la velocidad es importante, podrías también compile exifLib para .NET 4.0: http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0. Es más rápido que Image.FromFile (stream, false, false) cuando lee etiquetas individuales. Si necesita leer MUCHAS etiquetas, las bibliotecas integradas pueden ser más rápidas. –

7

metadata-extractor proyecto ha estado vivo y bien desde 2002 para Java, y ahora está disponible para .NET 3.5 y superior. También hay una versión PCL.

fuente
  • abierto (Apache 2.0)
  • probado en gran medida y ampliamente utilizado
  • es compatible con muchos tipos de imágenes (JPEG, TIFF, PNG, WebP, GIF, BMP, ICO, PCX ...)
  • Soporta muchos tipos de metadatos (EXIF, IPTC, XMP, JFIF, ...)
  • soporta varios campos específicos del fabricante (Canon, Nikon, ...)
  • muy rápido (procesos totalmente ~ 400 imágenes por un total de 1.33GB en ~ 3 segundos) con bajo consumo de memoria

Está disponible a través de NuGet o GitHub.

Ejemplo de uso:

IEnumerable<Directory> directories = ImageMetadataReader.ReadMetadata(path); 

foreach (var directory in directories) 
foreach (var tag in directory.Tags) 
    Console.WriteLine($"{directory.Name} - {tag.TagName} = {tag.Description}"); 

(Revelación: Mantengo esta biblioteca)

+0

No es lo que el OP solicitó, ya que es .NET 4.5+ solo – mfeineis

+0

Sin embargo, * es * una buena biblioteca y tal vez podría proporcionarnos una versión para nosotros, las almas pobres, todavía atrapados con .NET4.0? ¡Eso sería genial! Traté de cambiar el marco de destino en VS2015, pero parece que depende de muchas cosas de .NET4.5 ... – mfeineis

+1

@vanhelgen, gracias por los comentarios. También agregaré compatibilidad con versiones anteriores de .NET. Ver [este nuevo número] (https://github.com/drewnoakes/metadata-extractor-dotnet/issues/22). –

Cuestiones relacionadas