2010-01-19 17 views
2

Je suis en train d'écrire une bibliothèque open-source pour extraire des métadonnées d'image et les stocker comme XMP sérialisé dans un sidecar XML (idéalement identique à la façon dont les applications d'Adobe sérialisent leurs métadonnées).Comment convertir les clés BitmapMetadata en noms XMP correspondants?

Mon problème est qu'il semble que BitmapMetadata a toutes les valeurs dont j'ai besoin, mais les clés sont mutilées. Beaucoup d'entre eux ne sont que des entiers, plutôt que leurs noms XMP correspondant au style XML. Microsoft affirme utiliser XMP pour stocker lit/écrit plusieurs formats différents de métadonnées dans les médias, mais je ne vois aucun moyen de reconstruire certains des noms XMP standard à partir de ceux-ci.

Par exemple, Name = "/{ushort=272}", Format = "ifd" est ce que j'ai mais je dois est <tiff:Model>xmlns:tiff="http://ns.adobe.com/tiff/1.0/". Pour cela, je peux utiliser les ExifTags de mon ExifUtils library pour mapper certaines des clés parce que je sais ce que c'est. Cependant, je ne suis pas sûr de beaucoup d'autres.

Ma question:

  1. assez familier

    Toute personne ayant BitmapMetadata de savoir si je descendis une impasse?

  2. Existe-t-il un mappage normalisé codé par Microsoft? Je n'en ai pas encore trouvé au Adobe's official XMP specs.


Mise à jour: le code open source pour cette bibliothèque est maintenant disponible sur Google Code comme XmpUtils library. Il prend en charge la lecture/écriture de métadonnées XMP en tant que XML standard basé sur RDF.

Répondre

1

Comme il se trouve, le Windows Imaging Component (WIC) utilisé par BitmapMetadata lit/écrit de nombreux types de blocs de métadonnées, y compris TIFF, EXIF, IPTC, et XMP. Ceci explique pourquoi malheureusement leur modèle objet ne correspond pas très étroitement au modèle de sérialisation XMP; c'est très généralisé.

La correspondance de clé que je cherchais dépend de la section qui est décodée, et même dans le cas de XMP, ce n'est pas exactement une conversion propre. Les liens MSDN de l'autre réponse fournissent des descriptions détaillées du langage de requête de métadonnées, qui est la syntaxe de type XPath utilisée par WIC pour référencer des sections de métadonnées dans un média. Ceci est utile pour analyser chaque segment de chemin dans une clé qui peut ensuite être utilisée pour déterminer l'espace de noms XMP et le nom de propriété correspondants.

Comme je l'ai mentionné dans la question, j'ai maintenant construit cette bibliothèque qui convertit correctement un pourcentage très élevé des propriétés de métadonnées des blocs TIFF, EXIF ​​et XMP.

Voir le code source the XmpUtils library pour voir les détails de comment j'ai fini par extraire ces données d'une manière normalisée.

2

Je semble avoir trébuché sur le mappage des touches sur page 18 in Part 3 of the XMP spec. On dirait que BitmapMetadata est simplement exposer les sections de données XMP codées JPEG:

Les types de marqueurs FFE0-FFEF sont utilisés généralement pour les données d'application, nommé APPn. Par convention, un marqueur APPn commence par une chaîne identifiant l'utilisation, appelée espace de noms ou chaîne de signature. Un marqueur APP1 identifie les métadonnées Exif et TIFF ; un marqueur APP13 désigne une ressource d'image Photoshop (PSIR) contenant contenant des métadonnées IPTC; un autre marqueur APP1 désigne l'emplacement du paquet XMP .

Vous ne savez pas d'où provient la liste définitive car elle semble incomplète.


Mise à jour:

Je viens de tombé sur an MSDN set of pages ("Photo Metadata Policy") qui relie à une liste assez complète des chemins Microsoft Query Language métadonnées (à gauche) pour chaque propriété qu'ils soutiennent. C'est un format absolument horrible avec un chemin par page mais il semble y avoir beaucoup de données dont j'ai besoin. Malheureusement, il semble qu'il y ait différents chemins pour JPEG et TIFF ...


Mise à jour:

Aussi cette page est la clé, car elle définit la folie qui est cette syntaxe comme XPath: Metadata Query Language Overview