La lecture des données de métadonnées à partir de JPEG, EXIF, XMP ou en C#
J'ai été en regardant autour d'une manière décente de la lecture des métadonnées (plus précisément, la date de la prise) à partir de fichiers JPEG en C#, et je suis venue un peu court. L'information existante, pour autant que je peux voir, montre le code suivant;
BitmapMetadata bmd = (BitmapMetadata)frame.Metadata;
string a1 = (string)bmd.GetQuery("/app1/ifd/exif:{uint=36867}");
Mais dans mon ignorance, je n'ai aucune idée de ce que peu de métadonnées GetQuery() sera de retour, ou de ce passer.
Je veux tenter la lecture XMP d'abord, pour retomber à EXIF si XMP n'existe pas. Est-il une façon simple de le faire?
Grâce.
OriginalL'auteur tsvallender | 2010-02-17
Vous devez vous connecter pour publier un commentaire.
Suivantes semble fonctionner bien, mais si il ya quelque chose de mal, je te remercie de tout commentaire.
Celui qui à Microsoft a mis en place
BitmapMetaData.DateTaken
est un PARFAIT IDIOT! 1. Pourquoi est-ilstring
à tous? Dernière ligneget
estDateTime.ToString()
et de première ligne dansset
estConvert.ToDateTime()
. et 2.:get
renvoie à la culture spécifique de la chaîne etset
attend la culture insensible à la chaîne. IL Y A TOUT DE MANAGEMENT DE LA QUALITÉ CHEZ MICROSOFT???en fait, vous êtes un peu injuste. Dans les données Exif, les dates sont représentées comme des chaînes de caractères. Certains appareils utilisent des formats différents pour les autres, donc il n'y a aucune garantie que les états membres pourraient toujours écrire du code pour analyser correctement toute chaîne de date qu'il rencontre. Au moins, il passe à la chaîne brute que vous avez de sorte que vous pouvez déboguer ce qu'il se passe.
Je ne sais pas si
BitmapMetadata
fournit des données GPS, mais vous pouvez facilement utiliser les ma bibliothèque de le faire si vous le souhaitez.vous devez disposer de la
FileStream
objet.OriginalL'auteur tsvallender
J'ai porté mon Java open-source de la bibliothèque .NET récemment, et il prend en charge XMP, Exif de la CPI, JFIF et beaucoup plus de types de métadonnées à travers une gamme de formats d'image. Il va certainement obtenir ce que vous êtes après.
https://github.com/drewnoakes/metadata-extractor-dotnet
Cette bibliothèque prend également en charge XMP données, par l'intermédiaire d'un C# port d'Adobe XmpCore de la bibliothèque Java.
https://github.com/drewnoakes/xmp-core-dotnet
string dateTime = subIfdDirectory?.GetDescription(ExifDirectoryBase.TagDateTimeOriginal);
Ou vous pouvez l'utiliser pour obtenir dans DateTime? objetDateTime? dateTime = subIfdDirectory?.GetDateTime(ExifDirectoryBase.TagDateTimeOriginal);
peut que chose poignée de Picassa Région/du Visage de données drew? Je peux confirmer que sa bibliothèque ne fonctionne en effet bien pour les bases, vous êtes demandeur d'ici.
il a été un moment depuis que j'ai utilisé Picasa, mais je crois qu'il stocke ses métadonnées dans sa propre base de données ou dans des fichiers sidecar. MetadatExtractor n'a pas encore de support pour les fichiers sidecar, si je accepter une demande d'extraction si la mise en œuvre a été décent.
Salut a attiré. J'ai utilisé une variante de la brutalXmp ci-dessous et juste arraché sortir de gros. (on peut stocker les données à l'intérieur de l'jpg éventuellement, c'est dans les options, et d'écrire précédemment stockées à l'extérieur des données dans les fichiers - également dans les options) j'ai poussé jusqu'les résultats pour votre lecture (et la prochaine pauvre âme qui passe des jours de travail il comment faire cela, sans support de bibliothèque. Yup, Unity3d) RÉFÉRENCE: gist.github.com/twobob/ea6cb3b7c7d83c1b62513bcd67c0d39c
En fait , cette question stackoverflow.com/questions/23595560/... c'est également de l'utiliser si l'on souhaite aller en bas de la méta extracteur de route je me rends compte maintenant
OriginalL'auteur Drew Noakes
Je pense que ce que vous faites est une bonne solution car le Système.DateTaken gestionnaire applique automatiquement Les métadonnées des photos de la politique de retomber à d'autres espaces de noms pour trouver si une valeur existe.
EDIT:
Mise à jour du lien - http://msdn.microsoft.com/en-us/library/windows/desktop/ee872003(v=vs. 85).aspx
OriginalL'auteur muruge
Si vous êtes aux prises avec le XMP jn jpeg, cela fonctionne. Il ne s'appelle pas brutal pour rien!
GetElementsByTagName("rdf:Description")
et un peu de soin on peut extraire Picassa3 visage données de la Région avec cette. Au sommet de travail.OriginalL'auteur bbsimonbb
Mon société fait une .NET toolkit qui comprend XMP et EXIF des analyseurs.
Le processus typique est quelque chose comme ceci:
pour EXIF vous voulez faire cela:
évidemment, frameIndex serait de 0 pour JPEG.
Il y a libre et open source solutions de rechange.
OriginalL'auteur plinth