#1 2010-01-16 01:21:59

grum
Équipe Piwigo
50% Nantes - 50% Paris
2007-09-10
2502

Pré-requis pour gestion des tags XMP & Co.

J'ai suffisament avancé dans la programmation de mes classes pour mettre à disposition une version du code.

Sachant qu'elles vont être exploitées pour un plugin de démo nommé "AMetaData", j'ai créé sur le dépôt des plugins un répertoire "AMetaData".
Pour l'instant, point de plugin dans le répertoire, celui-ci viendra d'ici quelques semaines.

Seule la classe "JpegMetaData" y est présente, dans le sous-répertoire "JpegMetaData" (je ne vais pas chercher loin pour les noms...)

Le code est mis à disposition pour :
- que vous ayez un aperçu de ce que çà fait
- me faire des retours

Avant de recevoir 5000 messages, il est à noter :
- c'est encore en cours de réalisation, certaines fonctions peuvent changer de nom, de méthode d'appel, ou autres
      => si vous jetez un oeil sur le code et que quelque chose vous gène, vous pouvez me faire vos remarques
      => je sais déjà qu'il y a certains points à revoir
      => j'ai commenté un maximum le code, mais il me reste encore certains fichiers à commenter
- bien que le système de traduction soit en place, les fichiers de traduction ne sont pas à jour :
      => seuls les fichiers "en_UK" sont disponibles
      => les 'traductions' consistent pour l'instant à un "******"+la clef à traduire ; çà me permet juste de valider le système, et de bien voir qu'il s'agit d'un élément traduit et non pas de la clef
      => la classe ne fourni pas directement d'éléments traduits : elle fournie les clefs, il faut les traduire après coup. C'est voulu (flemme d'expliquer pourquoi pour l'instant)
      => pas la peine de se lancer dans la traduction des fichiers .po ; enfin si vous voulez, çà ne sera pas 100% perdu, mais disons que çà me semble prématuré pour l'instant
- concernant les métadonnées EXIF spécifiques aux fabricants, pour l'instant seul Pentax est implémenté
      => les autres viendront après, au fur et à mesure
      => pas la peine de se jeter sur l'adaptation des autres fabricants : lorsque j'aurais livré une version où je serais certain de ne pas revenir sur des points structurants, on abordera cette partie

Comment tester ?
Côté "utilisateur"
Dans le répertoire AMetaData/JpegMetaData/test, il y a un fichier index.php et deux images (07.jpg et 08.jpg)
- ce sont deux de mes photos, avec des métadonnées
- vous pouvez rajouter vos propres images dans ce répertoire pour tester la classe
Copier le tout sur un serveur local, et allez sur l'url correspondante au répertoire test
La page va s'afficher avec en haut, l'url des images présentes dans le répertoire.
Choisissez une image, la page se recharge avec l'analyse des métadonnées de celle-ci.

Je vous laisse découvrir à quoi çà ressemble, mais autant vous prévenir :
- c'est du brut
- c'est fait pour débugger

Au niveau des retours, j'attends surtout des photos qui ne passeraient pas, des tags inconnus, des tags connus et non implémentés qu'il semble indispensable d'implémenter, des tags connus mals implémentés, ...


Côté programmeur
L'idée c'est de jeter un oeil sur la classe proposée, voir si elle réponds aux besoins, s'il est possible de simplifier son usage.
JpegMetaData s'utilise de cette façon

Pour connaitre la liste des métadonnées connues et exploitables par la classe, indépendamment d'un fichier :

Code:

$list = JpegMetaData::getTagList();

Retourne un tableau d'éléments :
- la clef : l'identifiant de la métadonnée
     exemples : 'exif.tiff.DateTime', 'exif.Pentax.LensType', 'iptc.Date Sent', 'xmp.photoshop:CaptionWriter'
- la valeur :
      'name' => le nom de la métadonnée (donnée pouvant être traduite via la fonction Locale::get() )
      'implemented' => un booléen indiquant si l'interprétation de la métadonnée est implémentée ou non


Pour analyser une image :

Code:

$jmd = new JpegMetaData($fileName);

ou l'option alternative :

Code:

$jmd = new JpegMetaData();
$jmd->load($fileName);

on récupère les métadonnées avec getTags() :

Code:

$list = $jmd->getTags()

Retourne un tableau d'élements :
- la clef : l'identifiant de la métadonnée (même formalisme que celui décrit pour la fonction getTagList)
- la valeur : un object de type Tag
       l'objet dispose des méthodes suivantes :
         getName : retourne le nom du tag, peut être traduit au moyen de la fonction Locale::get()
         getValue : retourne la valeur brute, non interprétée, du tag
         getLabel : retourne la valeur interprétée du tag, peut être traduit au moyen de la fonction Locale::get()
         getIsKnown : indique si le tag est connu
         getIsImplemented : indique si l'interprétation du tag est implémentée
         getIsTranslatable : indique si la valeur interprétée du tag peut être traduite
         getId : retourne l'Id 'brut' du tag (pour un exif, retourne par exemple 0x9202 pour 'ApertureValue')

C'est à peu près tout.
Je vous laisse regarder le code, les fonctions présentés ont des paramètres optionnels que je n'ai pas décrit ici...


Je ne vais pas avoir beaucoup de temps pour continuer d'avancer, je pars au ski dans une semaine et j'ai tout un tas de choses à préparer d'ici là.
Disons que pour fin février, on devrait avoir Canon + Nikon au niveau des exifs constructeurs, plus peut-être un premier plugin ;-)


Mes photos avec Piwigo évidemment !
[ www.grum.fr ] [ photos.grum.fr ]

Hors ligne

#2 2010-01-16 10:17:32

LucMorizur
Membre
Vienne (Isère, 38)
2009-03-01
1967

Re: Pré-requis pour gestion des tags XMP & Co.

Bravo Grum ! Super !

Je vais regarder le plus vite possible, c'est-à-dire.......... euh, très bientôt :-/ !

Hors ligne

#3 2010-01-16 12:45:03

VDigital
Former Piwigo Team
Paris (FR)
2005-05-04
15124

Re: Pré-requis pour gestion des tags XMP & Co.

J'ai bien entendu déjà commencé de lire.
Rien que pour le plaisir de lire du code clair et propre, j'ai encore à apprendre.

Merci Grum.
;-)


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#4 2010-01-16 13:19:20

grum
Équipe Piwigo
50% Nantes - 50% Paris
2007-09-10
2502

Re: Pré-requis pour gestion des tags XMP & Co.

VDigital a écrit:

Rien que pour le plaisir de lire du code clair et propre, j'ai encore à apprendre.
Merci Grum.
;-)

De rien ;)

Et Dieu sait que le PHP n'est pas aidant de ce côté là. Même le Basic me semblait être moins permissif.... ;o)


Mes photos avec Piwigo évidemment !
[ www.grum.fr ] [ photos.grum.fr ]

Hors ligne

#5 2010-01-16 15:24:54

mathiasm
Former Piwigo Team
2006-02-06
2692

Re: Pré-requis pour gestion des tags XMP & Co.

ça m'a l'air très bien, ça.
vivement que ça soit fini.
Bon ski, en attendant.

grum a écrit:

getIsKnown : indique si le tag est connu
         getIsImplemented : indique si l'interprétation du tag est implémentée
         getIsTranslatable : indique si la valeur interprétée du tag peut être traduite

Juste une remarque: 2 verbes à la suite c'est trop. Retire le get pour celles-ci.

Hors ligne

#6 2010-01-16 15:52:17

grum
Équipe Piwigo
50% Nantes - 50% Paris
2007-09-10
2502

Re: Pré-requis pour gestion des tags XMP & Co.

mathiasm a écrit:

grum a écrit:

getIsKnown : indique si le tag est connu
         getIsImplemented : indique si l'interprétation du tag est implémentée
         getIsTranslatable : indique si la valeur interprétée du tag peut être traduite

Juste une remarque: 2 verbes à la suite c'est trop. Retire le get pour celles-ci.

Dans ce cas, je préfèrerais retirer le "Is", pour rester cohérent dans le nommage des méthodes.

getKnown
getImplemented
getTranslatable


?


Mes photos avec Piwigo évidemment !
[ www.grum.fr ] [ photos.grum.fr ]

Hors ligne

#7 2010-01-17 10:33:19

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12281

Re: Pré-requis pour gestion des tags XMP & Co.

Excellent tout ça :-) Je vais tester ça dans la semaine et faire un retour. Souhaites-tu que je fasse une traduction de ce topic sur le forum central anglophone pour tenter d'obtenir des retours "internationaux" ?

Je déplace également ce topic dans la section "beta test", c'est tout à fait opportun, et on est loin du divers.

grum a écrit:


getKnown
getImplemented
getTranslatable


?

Si la fonction renvoie un boolean, c'est bien isKnown et pas getKnown. Le isXxx est un cas particulier du getXxx. Dans le code, si on écrit:

Code:

if (isKnown())

là c'est sans ambigüité

Code:

if (getKnown())

là c'est ambigu

Hors ligne

#8 2010-01-17 11:53:27

grum
Équipe Piwigo
50% Nantes - 50% Paris
2007-09-10
2502

Re: Pré-requis pour gestion des tags XMP & Co.

plg a écrit:

Souhaites-tu que je fasse une traduction de ce topic sur le forum central anglophone pour tenter d'obtenir des retours "internationaux" ?

il est vrai qu'à la base je me suis lancé sur ce projet suite à requête d'un utilisateur du forum anglophone. et que plus il y a aura de retours, mieux çà sera.
donc pourquoi pas, je veux bien (que tu le fasses, j'avoue que çà m'ôte une épine du pied)

plg a écrit:

Si la fonction renvoie un boolean, c'est bien isKnown et pas getKnown. Le isXxx est un cas particulier du getXxx. Dans le code, si on écrit:

Code:

if (isKnown())

là c'est sans ambigüité

Code:

if (getKnown())

là c'est ambigu

ok.


Mes photos avec Piwigo évidemment !
[ www.grum.fr ] [ photos.grum.fr ]

Hors ligne

#9 2010-01-17 12:10:13

grum
Équipe Piwigo
50% Nantes - 50% Paris
2007-09-10
2502

Re: Pré-requis pour gestion des tags XMP & Co.

Je reviens sur le nommage des fonctions.

j'avais getIsKnown et setIsKnown.
j'ai remplacé getIsKnown par isKnown mais le set a le même problème que le get (à savoir, 2 verbes)  o_O


Mes photos avec Piwigo évidemment !
[ www.grum.fr ] [ photos.grum.fr ]

Hors ligne

#10 2010-01-17 13:07:04

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Pré-requis pour gestion des tags XMP & Co.

grum a écrit:

Je reviens sur le nommage des fonctions.

j'avais getIsKnown et setIsKnown.
j'ai remplacé getIsKnown par isKnown mais le set a le même problème que le get (à savoir, 2 verbes)  o_O

Sémantiquement parlant, ce que tu as retiré n'est pas neutre : 'set' et 'get', ça n'est pas la même chose !
C'est peut-être l'autre verbe qu'il fallait retirer ;-)

Hors ligne

#11 2010-01-17 15:55:17

VDigital
Former Piwigo Team
Paris (FR)
2005-05-04
15124

Re: Pré-requis pour gestion des tags XMP & Co.

Décidément, aujourd'hui tout le monde a des problèmes de lecture.
tosca, peux-tu relire le message de grum? (Il est de ton avis à priori).


Vincent -« Plus vidéaste averti que photographe amateur... »
La galerie - Le blog   

Piwigo est une application libre de gestion de photos en ligne.

Hors ligne

#12 2010-01-17 16:26:39

tosca
Former Piwigo Team
Cévennes (Gard)
2006-09-23
3818

Re: Pré-requis pour gestion des tags XMP & Co.

VDigital a écrit:

Décidément, aujourd'hui tout le monde a des problèmes de lecture.

Et d'autres des problèmes d'interprétation ? ;-)

VDigital a écrit:

tosca, peux-tu relire le message de grum? (Il est de ton avis à priori).

Je ne faisais que commenter, en disant que des 2 verbes, il avait retiré celui qui n'était pas le bon ...

MDR Je retourne à ma scie sauteuse ... qui ne critiquera pas ma manière de lire, au moins !

Hors ligne

#13 2010-01-17 16:40:24

mathiasm
Former Piwigo Team
2006-02-06
2692

Re: Pré-requis pour gestion des tags XMP & Co.

Je n'ai pas charger le fichier mais, comme ça, de loin:
isKnown est une méthode "publique" qui permet de récupérer un booléen.
Pour le définir, setKnown, qui est une méthode privée appelée à l'intérieur d'une fonction de la classe, non ?
(librement inspiré de Qt, rubrique "Naming Boolean Getters, Setters, and Properties")

Hors ligne

#14 2010-01-17 16:52:50

grum
Équipe Piwigo
50% Nantes - 50% Paris
2007-09-10
2502

Re: Pré-requis pour gestion des tags XMP & Co.

setIsKnown est aussi une méthode publique.

A la lecture de la page que tu indique, il faut donc avoir :
isKnown() => récupérer la valeur
setKnown() => affecter la valeur


Mes photos avec Piwigo évidemment !
[ www.grum.fr ] [ photos.grum.fr ]

Hors ligne

#15 2010-01-18 10:38:31

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12281

Re: Pré-requis pour gestion des tags XMP & Co.

En PHP 5.3 (que j'ai par défaut en local pour corriger des bugs qu'on nous a reporté avec cette version récente) la classe Locale fait parti du core de PHP, du coup:

Fatal error: Cannot redeclare class Locale in /home/pierrick/public_html/test/AMetaData/JpegMetaData/Common/Locale.class.php on line 91

Je vais désinstaller PHP 5.3 et remettre 5.2 pour faire les tests.

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter facebook newsletter Faire un don Piwigo.org © 2002-2019 · Contact