Comment obtenir les données EXIF ​​d’un fichier en utilisant C #

Je voudrais écrire un petit programme en C # qui parcourt mes photos jpeg et, par exemple, les sortinge dans des dossiers datés (en utilisant MY conventions de datation, dammit …).

Est-ce que quelqu’un connaît un moyen relativement facile d’obtenir les données EXIF ​​telles que la date et l’heure ou l’exposition par programme? Merci!

Découvrez cet extracteur de métadonnées . Il est écrit en Java mais a également été porté sur C #. J’ai utilisé la version Java pour écrire un petit utilitaire permettant de renommer mes fichiers jpeg en fonction des balises de date et de modèle. Très facile à utiliser.


EDIT metadata-extractor prend également en charge .NET. C’est une bibliothèque simple et rapide pour accéder aux métadonnées à partir d’images et de vidéos.

Il prend entièrement en charge Exif, ainsi que IPTC, XMP et de nombreux autres types de métadonnées à partir de types de fichiers, y compris 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().FirstOrDefault(); var dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTime); 

Il est disponible via NuGet et le code sur GitHub .

Comme suggéré, vous pouvez utiliser une bibliothèque tierce ou la faire manuellement (ce qui n’est pas très compliqué), mais la plus simple et la plus flexible consiste à utiliser la fonctionnalité intégrée dans .NET. Pour plus voir:

  • Propriété System.Drawing.Image.PropertyItems

  • Classe System.Drawing.Imaging.PropertyItem

  • Comment: lire les métadonnées d’image

Je dis “c’est le plus flexible” car .NET n’essaie pas d’interpréter ou de fusionner les données de quelque manière que ce soit. Pour chaque EXIF, vous obtenez essentiellement un tableau d’octets. Cela peut être bon ou mauvais selon la quantité de contrôle que vous voulez réellement.

De plus, je tiens à souligner que la liste de propriétés ne correspond pas directement aux valeurs EXIF. EXIF lui-même est stocké dans plusieurs tables avec des ID qui se chevauchent, mais .NET place tout dans une liste et redéfinit les identifiants de certains éléments. Mais tant que vous ne vous souciez pas des identifiants EXIF ​​précis, vous devriez vous familiariser avec le mappage .NET.

Voici un lien vers une autre question SO similaire , qui contient une réponse à ce bon article sur “Lecture, écriture et métadonnées de photos” dans .Net.

Vous pouvez utiliser TagLib # qui est utilisé par des applications telles que F-Spot . Outre Exif, il lit une bonne quantité de formats de métadonnées pour l’image, l’audio et la vidéo.

J’aime aussi l’API ExifUtils mais elle est buggée et n’est pas activement développée.

La classe d’image a les propriétés PropertyItems et PropertyIdList. Vous pouvez les utiliser.

L’outil de ligne de commande ExifTool de Phil Harvey fonctionne avec des dizaines de formats d’images – y compris de nombreux formats RAW propriétaires – et peut manipuler divers formats de métadonnées, notamment EXIF, GPS, IPTC, XMP, JFIF.

Très facile à utiliser, léger, application impressionnante.

Obtenir des données EXIF ​​à partir d’une image JPEG implique:

  1. Rechercher les marqueurs JPEG qui mentionnent le début des données EXIF ​​,. Par exemple, normalement, oxFFE1 est le marqueur inséré lors de l’encodage des données EXIF, qui est un segment de l’application, où les données EXIF ​​vont.
  2. Analyser toutes les données de par exemple 0xFFE1 à 0xFFE2. Ces données seraient un stream d’octets, dans le fichier encodé JPEG.
  3. L’équivalent ASCII de ces octets contiendrait diverses informations relatives à la date de l’image, au nom du modèle de caméra, à l’exposition, etc.