Question

J'aimerais écrire un petit programme en C# qui parcourt mes photos jpeg et, par exemple, les trie dans des dossiers datés (en utilisant MES conventions de rencontres, bon sang...).

Quelqu'un connaît-il un moyen relativement simple d'accéder aux données EXIF ​​telles que la date et l'heure ou l'exposition par programme ?Merci!

Était-ce utile?

La solution

Regarde ça extracteur de métadonnées. Il est écrit en Java mais a également été porté en 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.


MODIFIER extracteur de métadonnées prend également en charge .NET.C'est une bibliothèque très rapide et simple pour accéder aux métadonnées des images et des vidéos.

Il prend entièrement en charge Exif, ainsi qu'IPTC, XMP et de nombreux autres types de métadonnées à partir de types de fichiers, notamment 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);

Il est disponible via NuGet et le le code est sur GitHub.

Autres conseils

Comme suggéré, vous pouvez utiliser une bibliothèque tierce ou le faire manuellement (ce qui ne demande pas beaucoup de travail), mais le plus simple et le plus flexible est peut-être d'utiliser la fonctionnalité intégrée dans .NET.Pour en savoir plus, voir :

Je dis "c'est le plus flexible" car .NET n'essaie en aucun cas d'interpréter ou de fusionner les données.Pour chaque EXIF, vous obtenez essentiellement un tableau d'octets.Cela peut être bon ou mauvais selon le degré de contrôle que vous souhaitez réellement.

Aussi, je dois souligner que la liste des propriétés ne correspond en fait pas directement aux valeurs EXIF.EXIF lui-même est stocké dans plusieurs tables avec des ID qui se chevauchent, mais .NET met tout dans une seule liste et redéfinit les ID de certains éléments.Mais tant que vous ne vous souciez pas des ID EXIF ​​précis, le mappage .NET devrait vous convenir.

Voici un lien vers un autre question SO similaire, qui a une réponse pointant vers ce bon article sur "Lecture, écriture et métadonnées photo" dans .Net.

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

J'aime aussi ExifUtils API mais elle est boguée et n'est pas activement développée.

La classe Image possède les propriétés PropertyItems et PropertyIdList.Vous pouvez les utiliser.

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

  1. Recherche des marqueurs JPEG qui mentionnent le début des données EXIF.par exemple.normalement, oxFFE1 est le marqueur inséré lors du codage des données EXIF, qui est un segment APPlication, où vont les données EXIF.
  2. Analysez toutes les données, par exemple 0xFFE1 à 0xFFE2 .Ces données seraient un flux d'octets, dans le fichier codé JPEG.
  3. L'équivalent ASCII de ces octets contiendrait diverses informations liées à la date de l'image, au nom du modèle de l'appareil photo, à l'exposition, etc.

L'outil en ligne de commande ExifTool par Phil Harvey fonctionne avec des dizaines de formats d'images - y compris de nombreux formats RAW propriétaires - et peut manipuler une variété de formats de métadonnées, notamment EXIF, GPS, IPTC, XMP, JFIF.

Application très facile à utiliser, légère et impressionnante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top