Bonjour,
Je suis intéressé par une fonctionnalité constant à ré-écrire dans les fichiers photos (jpg) les tags de Piwigo.
Dans le champs : 'iptc_keywords' '2#025'
En effet Piwigo est très pratique pour gérer les tags dans la galerie, en revanche, lorsqu'un utilisateur télécharge une ou plusieurs photos (HD), les tags ne sont pas forcément les bons.
Cette fonctionnalité, pourrait s'étendre à :
- date de prise de vue (2#030)
- auteur (2#080 )
- description (2#120)
- ...
Amade
Hors ligne
Bonjour,
Piwigo est un logiciel de galerie photo et non un logiciel de traitement photographique comme peuvent l'être Lightroom, XnView, Digikam etc.
Piwigo affiche les photos, on peut modifié certaines informations mais jamais Piwigo va dénaturer les photos.
La demande devient récurante et nous comprenons vos motivations.
Seulement une telle fonctionnalité demande une réflexion sur le traitement des données (Piwigo doit-il toujours s'abstenir de dénaturer les photos à afficher), mais surtout une telle fonctionnalité n'est pas sans danger sur les ressources des serveurs de vos sites web. Car tous les hébergeurs ne permettront pas de modifier des photos (certains hébergeurs n'en sont pas capables tout simplement) et d'autre l'autorise mais c'est la porte ouverte aux dérives car le processus est gourmand en ressource système.
Donc la réponse est immuable :
Piwigo va afficher vos photos dans des galeries mais Piwigo ne va pas modifier (dénaturer) vos photos.
Pour conserver un flux de travail cohérent, efficace et sûre, il est préférable que vous éditez les informations (méta-données) directement depuis votre photo originale (sur votre ordinateur) et que vous la renvoyez vers Piwigo. Ce dernier est capable(*) de synchroniser les fichiers pour mettre à jour les informations de la photo ainsi renvoyée.
(*) Avec les outils/plugins tels que : pLoader, Photo Update, Lightroom, Digikam
Hors ligne
Bonjour,
Je comprends votre position mais dans certaines situations il serait intéressant de le permettre. Pas dans le core mais par plugin.
Dans mon cas (Serveur perso et galerie intégralement privée), j'utilise Piwigo pour rendre plus accessible et dynamique mes gigas de photos. Elles sont ainsi accessibles depuis n'importe qu'elle PC (ou tablette).
Installer DigiKam sur chacun de ces PCs seraient fastidieux et à mon avis contradictoire avec l'architecture (private cloud).
Je me suis donc lancé dans l'écriture d'un plugin. Voici le résultat.
Création des triggers
Fichier admin/include/functions.php
1. function set_tags($tags, $image_id)
Ajouter juste avant la fin de la fonction:
trigger_action('set_tags',$tags,$image_id);
2. function add_tags($tags, $images)
Ajouter juste avant la fin de la fonction:
trigger_action('add_tags',$tags,$images);
TODO: catcher d'autres fonctions:
- admin/include/delete_tags qui supprime des tags et les associations image correspondantes
- admin/include/set_tags_of qui parse une table image_id => array(tag_id) pour créer les tags
- Autres fonctions à trouver dans le code
- Editer les tags sélectionnés (Page Admin/Photos/Tags)
- Fusionner les tags sélectionnés (Page Admin/Photos/Tags)
- Supprimer les tags (Page Admin/Gestion par lot)
Fichier main.inc.php du plugin
<?php /* Plugin Name: Reverse data Version: 0.1.0 Description: Write into images data entered in Piwigo (tags) Plugin URI: None Author: TdM */ if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); define('REVERSE_PATH' , PHPWG_PLUGINS_PATH . basename(dirname(__FILE__)) . '/'); function single_write_tags($tags_id, $image_id){ multiple_write_tags($tags_id,array($image_id)); } function multiple_write_tags($tags_id,$images_id){ include_once("include/iptc.php"); include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php'); $query = ' SELECT id, path, has_high FROM '.IMAGES_TABLE.' WHERE id IN ('.implode(',', $images_id).') ;'; $result = pwg_query($query); while ($row = pwg_db_fetch_assoc($result)){ if (!empty($row['has_high']) and get_boolean($row['has_high'])) // Récupération du chemin vers l'image HD $path = get_high_path($row); // Récupération des valeurs des keywords $query = ' SELECT name FROM '.TAGS_TABLE.' WHERE id IN ('.implode(',', $tags_id).') ;'; $keywords = array_from_query($query, 'name'); // Tag IPTC de l'image HD $iptc = new iptc($path); $iptc->set(IPTC_KEYWORDS,$keywords); $iptc->write(); } } } add_event_handler('add_tags', 'multiple_write_tags', 50, 2); add_event_handler('set_tags', 'single_write_tags', 50, 2); ?>
Fichier include/iptc.php
<?php /************************************************************\ IPTC EASY 1.0 - IPTC data manipulator for JPEG images All reserved www.image-host-script.com - Sep 15, 2008 Modified by TdM - December 2011 \************************************************************/ DEFINE('IPTC_OBJECT_NAME', '005'); DEFINE('IPTC_EDIT_STATUS', '007'); DEFINE('IPTC_PRIORITY', '010'); DEFINE('IPTC_CATEGORY', '015'); DEFINE('IPTC_SUPPLEMENTAL_CATEGORY', '020'); DEFINE('IPTC_FIXTURE_IDENTIFIER', '022'); DEFINE('IPTC_KEYWORDS', '025'); DEFINE('IPTC_RELEASE_DATE', '030'); DEFINE('IPTC_RELEASE_TIME', '035'); DEFINE('IPTC_SPECIAL_INSTRUCTIONS', '040'); DEFINE('IPTC_REFERENCE_SERVICE', '045'); DEFINE('IPTC_REFERENCE_DATE', '047'); DEFINE('IPTC_REFERENCE_NUMBER', '050'); DEFINE('IPTC_CREATED_DATE', '055'); DEFINE('IPTC_CREATED_TIME', '060'); DEFINE('IPTC_ORIGINATING_PROGRAM', '065'); DEFINE('IPTC_PROGRAM_VERSION', '070'); DEFINE('IPTC_OBJECT_CYCLE', '075'); DEFINE('IPTC_BYLINE', '080'); DEFINE('IPTC_BYLINE_TITLE', '085'); DEFINE('IPTC_CITY', '090'); DEFINE('IPTC_PROVINCE_STATE', '095'); DEFINE('IPTC_COUNTRY_CODE', '100'); DEFINE('IPTC_COUNTRY', '101'); DEFINE('IPTC_ORIGINAL_TRANSMISSION_REFERENCE', '103'); DEFINE('IPTC_HEADLINE', '105'); DEFINE('IPTC_CREDIT', '110'); DEFINE('IPTC_SOURCE', '115'); DEFINE('IPTC_COPYRIGHT_STRING', '116'); DEFINE('IPTC_CAPTION', '120'); DEFINE('IPTC_LOCAL_CAPTION', '121'); class iptc { var $meta=Array(); var $hasmeta=false; var $file=false; function iptc($filename) { $size = getimagesize($filename,$info); $this->hasmeta = isset($info["APP13"]); if($this->hasmeta) $this->meta = iptcparse ($info["APP13"]); $this->file = $filename; } function set($tag, $data) { // Cette fonction remplace les meta-data existante if(is_array($data)){ $c = count($data); for ($i=0; $i <$c; $i++){ $this->meta["2#$tag"][$i] = $data[$i]; } $this->hasmeta=true; } else { $this->meta["2#$tag"]= Array( $data ); $this->hasmeta=true; } } function get($tag) { if(array_key_exists("2#$tag", $this->meta)) { return $this->meta["2#$tag"]; } else return false; } function dump() { print_r($this->meta); } function binary() { // These two lines ensure that UTF8-Encoding will work (set the 1:90 field in the envelop) // @see http://cpanforum.com/threads/2114 for a hint $utf8seq = chr(0x1b) . chr(0x25) . chr(0x47); $length = strlen($utf8seq); $iptc_new = chr(0x1C) . chr(1) . chr('090') . chr($length >> 8) . chr($length & 0xFF) . $utf8seq; foreach (array_keys($this->meta) as $s) { $tag = str_replace("2#", "", $s); if(count($this->meta[$s])>1){ foreach ($this->meta[$s] as $row){ $iptc_new .= $this->iptc_maketag(2, $tag, $row); } }else { $iptc_new .= $this->iptc_maketag(2, $tag, $this->meta[$s][0]); } } return $iptc_new; } function iptc_maketag($rec,$dat,$val) { $len = strlen($val); if ($len < 0x8000) { return chr(0x1c).chr($rec).chr($dat). chr($len >> 8). chr($len & 0xff). $val; } else { return chr(0x1c).chr($rec).chr($dat). chr(0x80).chr(0x04). chr(($len >> 24) & 0xff). chr(($len >> 16) & 0xff). chr(($len >> 8 ) & 0xff). chr(($len ) & 0xff). $val; } } function write() { if(!function_exists('iptcembed')) return false; $mode = 0; $content = iptcembed($this->binary(), $this->file, $mode); if(is_link($this->file)) // Linux only $filename = readlink($this->file); else $filename = $this->file; @unlink($filename); #delete if exists $fp = fopen($filename, "w"); fwrite($fp, $content); fclose($fp); } }; ?>
Ne connaissant pas le code je tâtonne pour découvrir les fonctions qui manipulent les tags mais c'est un début pour permettre à d'autres de développer leur propre plugin perso sur le sujet.
J'avais commencé un plugin pour ce "reverse tag" il y a quelque années:
http://fr.piwigo.org/ext/extension_view.php?eid=292
http://fr.piwigo.org/forum/viewtopic.php?pid=111979
Le concept est d exporter les données nécessaires de la base et de créer un script qui va mette à jour les fichiers (indépendamment de piwigo). Pour par part, j utilise exiftool sous Windows 7: exiftool est robuste et est sans doute l outil qui supporte le mieux les meta données.
Il est resté en phase de beta (et pas à jour), car j'ai pas trouvé de solution fiable pour exporter proprement les caractères unicode (accents par ex), le pb étant lié à php ne supportant pas l unicode! Le sujet semble d ailleurs être un des soucis principal du développement de PHP6...
Tanguy, si je comprend bien, tu as choisi une autre voie: lancer l'écriture des meta data directement par le plugin. Bon courage car cela semble bcp plus fastidieux (et assez risqué aussi, si tu écrases les mauvaises données du fichier). Mais cela aurait peut être le mérite de passer outre les problèmes d encodage! En tous cas, je te conseille de consulter la doc d exiftool pour mieux connaitre les tags (par ex, http://www.sno.phy.queensu.ca/~phil/exi … Canon.html pour canon, il y a des pages similaires pour les autres marques)
Dernière modification par Eric B (2012-03-03 16:39:05)
Hors ligne
Gotcha a écrit:
Piwigo va afficher vos photos dans des galeries mais Piwigo ne va pas modifier (dénaturer) vos photos.
Pour conserver un flux de travail cohérent, efficace et sûre, il est préférable que vous éditez les informations (méta-données) directement depuis votre photo originale (sur votre ordinateur) et que vous la renvoyez vers Piwigo. Ce dernier est capable(*) de synchroniser les fichiers pour mettre à jour les informations de la photo ainsi renvoyée.
(*) Avec les outils/plugins tels que : pLoader, Photo Update, Lightroom, Digikam
Oui mais si l'on utilise pas d'outil et que Piwigo accède directement à notre répertoire de photos ?
A mon avis, le problème vient du fait que piwigo gère les metadata à moitié. C'est plus qu'un simple reader puisqu'il permet d'associer des tags, mais pas tout à fait éditeur puisqu'il ne les enregistre pas à la source. On arrive donc à un décalage entre les tags des photos et les tags de piwigo... Si tous les logiciels marchent ainsi, la gestion des metadata va vite être un capharnaüm
Si le but est de ne pas modifier les photos, qui semble logique, alors il faut l'assumer et ne tirer les informations uniquement de celles ci et les mettre à jour régulièrement. Personnellement, il m'arrive de rajouter des tags sur une ou deux photos lorsque je les -//:---\spam a des invités par exemple. Je ne pensent pas forcément a resynchroniser l'album ensuite.
Peut être qu'un simple fitre dans l'écran de gestion par lot suffirait : "Fichiers modifié depuis 7 jours" qui serait basé sur la date de modification du fichier.
Hors ligne
Piwigo n'est pas un logiciel dédié à la classification de ses photos comme peuvent l'être des logiciel catalogueurs tels que Picasa, Lightroom, Digikam etc.
Peut être qu'un simple fitre dans l'écran de gestion par lot suffirait : "Fichiers modifié depuis 7 jours" qui serait basé sur la date de modification du fichier.
Piwigo ne permet pas d'utiliser un tel filtre car lorsque l'on édite les informations sur les photos, rien n'indique une quelconque date de modification. Ce n'est pas prévu pour le moment car encore une fois, nous préférons présenter Piwigo comme une "simple galerie web" et non comme un logiciel à tout faire.
Votre galerie n'étant que la partie visible d'un iceberg ;-)
Hors ligne
Gotcha a écrit:
Piwigo n'est pas un logiciel dédié à la classification de ses photos comme peuvent l'être des logiciel catalogueurs tels que Picasa, Lightroom, Digikam etc.
Dans ce cas pourquoi proposer la possibilité de rajouter des tags, d'avoir un système interne de gestion de ces données ? C'est contradictoire... Il serait plus logique de ne lire que le résultat de ces logiciels.
Piwigo ne permet pas d'utiliser un tel filtre car lorsque l'on édite les informations sur les photos, rien n'indique une quelconque date de modification.
je parlais du fichier directement. il y a bien une date de modification enregistré par le système de fichier. Cela permettrait de voir que des "logiciel catalogueurs" ont modifié la photo et que piwigo doit se mettre à jour pour être synchrone. Que ce soit sur les metadata ou sur les miniatures (il m'arrive svt de corriger un développement photo a posteriori)
En tout cas, merci pour votre travail, j'ai hate de voir la 2.4 !
Hors ligne
Awikatchikaen a écrit:
Gotcha a écrit:
Piwigo n'est pas un logiciel dédié à la classification de ses photos comme peuvent l'être des logiciel catalogueurs tels que Picasa, Lightroom, Digikam etc.
Dans ce cas pourquoi proposer la possibilité de rajouter des tags, d'avoir un système interne de gestion de ces données ? C'est contradictoire... Il serait plus logique de ne lire que le résultat de ces logiciels.
Vous n'allez pas demander à ce que l'on enlève certaines liberté sous prétexte que Piwigo n'altère pas les fichiers image ?! ^_^;
Nous vous offrons cette possibilité de pouvoir gérer à postériori vos tags. Si ce n'est pas votre manière de procéder, il y en a beaucoup (la grande majorité) qui aiment ce fonctionnement sans avoir à se soucier de la "technique" par derrière (ignorant que les tags ne sont stockés que dans la BDD).
Awikatchikaen a écrit:
Piwigo ne permet pas d'utiliser un tel filtre car lorsque l'on édite les informations sur les photos, rien n'indique une quelconque date de modification.
je parlais du fichier directement. il y a bien une date de modification enregistré par le système de fichier. Cela permettrait de voir que des "logiciel catalogueurs" ont modifié la photo et que piwigo doit se mettre à jour pour être synchrone. Que ce soit sur les metadata ou sur les miniatures (il m'arrive svt de corriger un développement photo a posteriori)
Alors pour vous il faut utiliser la synchronisation. A ce moment là, vous demandez à Piwigo d'analyser et de mettre à jour les données. Sans ce passage par la case "synchroniser" Piwigo ne va pas savoir tout seul (de son propre chef) qu'il faut mettre à jour tel ou tel photo.
Sinon, les logiciel externes comme pLoader, Piwigo_Export (Lightroom), Digikam etc utilisent l'API de Piwigo et la modification d'une image sur votre ordinateur entraine sa mise à jour sur le serveur (lorsqu'on en donne l'ordre).
Hors ligne
Bonjour,
Je suis moi aussi pour une mise à jour bidirectionnel (de la photo vers piwigo et inversement ) de certaines métadonnées. En particulier celles qui ont un lien avec les activités d'une galerie photo (surtout le classement) : tags, notation, titre ...(C'est d'ailleurs pour cela que piwigo permet de saisir ces données)
Il ne s'agit pas d'ajouter des fonctions de traitements de photo à piwigo. Des produits comme digikam font ça très bien comme vous le dites.
Mais il n'y a pas plus frustrant de passer des heures à classer ces photos (tags,notation) et tout perdre soit parce que l'on n'a pas sauvegardé sa base de donnée ou simplement parce que l'on veut gérer ces photos avec une autre produit. L'équipe piwigo met beaucoup en avant le fait de ne pas enfermer ces utilisateurs avec piwigo mais c'est d'une certaine façon le cas si on doit ressaisir toutes ces données dans une autre galerie.
En espérant que ces arguments auront fait avancer le débat.
Fred.
Hors ligne
Bonjour,
@fredpf
Tu peux bien sur faire un plugin pour faire cela ;-)
Hors ligne
Le principe de pouvoir mettre à jour les métadonnées à partir des propriétés de photo dans Piwigo, je suis tout à fait d'accord que ce serait bien. Pour être tout à fait transparent, c'est techniquement compliqué. Il faut gérer le problème de l'encoding et on va forcément passer par un outil qui s'appelle exiftool et qui ne sera pas disponible partout.
C'est à cause de cette complexité, et parce que finalement ça intéresse très peu les utilisateurs croyez moi, que cette fonctionnalité n'a jamais été la priorité. Mais je compte bosser dessus quand même, ce n'est pas un refus.
Hors ligne