Joomladay francophone 2018 à Paris 18 et 19 mai

"EXG_descriptions.xml" généré automatiquement avec commentaires IPTC des jpgs

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • "EXG_descriptions.xml" généré automatiquement avec commentaires IPTC des jpgs

    Salut tout le monde,

    Pour la gestion de mes photos, j’utilise Picasa et je l’utilise aussi pour commenter mes photos car très pratique et facile d'emploi. (Pour ceux que ça intéresse, Picasa remplit le champ commentaire IPTC du jpeg)

    Je voulais donc utiliser mes commentaires insérés dans Picasa pour mes galleries Easy eXtended Gallery. Une des solutions du plugin EXG pour afficher les commentaires des images d’une galerie, est l’utilisation du fichier « EXG_descriptions.xml ». Mais cela me prendrait un long moment à chaque fois pour générer ce fichier et copier/coller les commentaires depuis Picasa, alors j’ai écris un petit script qui génère ce fichier xml et récupère les commentaires « Picasa » associés à chaque image.

    Bien que je l’ai écris rapidement, je me suis dis que ça pouvait peut être intéressé d’autres EXGers (utilisateurs de Easy eXended Gallery ) qui commentent aussi leurs photos ailleurs

    Le script n’a besoin que de 3 infos :
    - $photosFolder : répertoire dans lequel se trouvent les photos
    - $galleryName : nom de la galerie
    - $galleryDescription : description de la galerie


    PETITE PARTICULARITE : Si vous regardez un peu le code, vous remarquerez certainement la fonction « separateLanguagesInCaption »... C'est parce que je commente mes photos en 2 langues différentes généralement séparées par deux espaces, un « / » et encore deux espaces. Pour le moment ce n'est pas très utile mais je me tiens ainsi prêt pour la prochaine version de EXG qui sera MULTILINGUE !!! ( n’est-ce pas opware2000 ? ;o) )


    Je suis novice en PHP donc pas de problème si vous avez des commentaires sur le code, je suis tout à fait conscient que ce n'est pas le nec plus ultra d'un codage PHP D'ailleurs, je suis tout à fait preneur pour améliorer ce code

    Le code comprend deux fichiers : main.php et iptc.inc.php
    **
    note modo : pour EXG 1.5.0.3
    Dernière édition par opware2000 à 27/11/2007, 16h54 Raison: rajout "pour exg 1.5.0.3"

  • #2
    fichier main.php

    Code PHP:
    <?php
    include "iptc.inc.php";

    //VARIABLES
    $photosFolder="Z:\\Photos\\vacances\\";
    $galleryName="NomDeLaGalerie";
    $galleryDescription="Ici je mets la description de la galerie";


    //Open the output file
    if (!($fp fopen($photosFolder."EXG_descriptions.xml"'w')))
        return;

    fprintf($fp"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
    fprintf($fp"<jos_exg>\n");
    fprintf($fp"\t<titre>%s</titre>\n"$galleryName);
    fprintf($fp"\t<descriptiongal>%s</descriptiongal>\n"$galleryDescription);


    //For each image
    foreach (glob($photosFolder."*.jpg") as $inputFileNameWithPath)
    {
        
    //// Split $inputFileNameWithPath to get only the name of the file without the whole path
        
    $splitResult split("\\\\"$inputFileNameWithPath);
        
    $fileName $splitResult[count($splitResult) -1];
        
        
    //Get the comments about the required image
        
    $comments getImageComments($inputFileNameWithPath);
                    
        
    fprintf($fp"\t<image>\n");
        
    fprintf($fp"\t\t<fichier>%s</fichier>\n"$fileName);
        
    //fprintf($fp, "\t\t<legende>l&eacute;gende du fichier 1</legende>\n");
        
    fprintf($fp"\t\t<description>%s</description>\n"$comments[0]);
        
    fprintf($fp"\t</image>\n");
    //END - For each image

    fprintf($fp"</jos_exg>\n");
    fclose($fp);

    ?>

    fichier iptc.php.inc

    Code PHP:
    <?php

    /************************************************************************************************/
    /*    getCaptionFromFile:  GET the IPTC data of an image file and return the caption field        */
    /* return FALSE in case of an ERROR                                                                */
    /************************************************************************************************/
    function getCaptionFromFile$image_path ) {

        
    $size getimagesize $image_path$info);
        if(!
    is_array($info))
        {   
            return 
    FALSE;
        }
        
        
    $iptc iptcparse($info["APP13"]);
        if( 
    $iptc == FALSE )
        {
            return 
    FALSE;
        }
        
        
    //we are only interested in the comment/caption field which is "2#120"
        
    $caption $iptc["2#120"][0];
        
        
    //Fix the problem with the character "\0" at the end of the string (this char is added if you used Picasa for example)
        
    if( !strcmp(substr($caption, -1), "\0"))
        {
            
    $caption substr($caption0, -1);
        }
        
        return 
    $caption;
    }


    /************************************************************************************************/
    /* separateLanguagesInCaption: This function separate the different languages of                */
    /*                                    a caption, separated by a "/"                                */
    /* return FALSE in case of an ERROR                                                                */
    /************************************************************************************************/
    function separateLanguagesInCaption$caption$numberOfLanguages )
    {
        
    // in the comments of the jpg files, french and english are separated by "  /  ". This ligne splits when : one or more space or tabs then "/" then one or more space or tabs again.
        
    $langArray split("[\n\r\t ]+ / [\n\r\t ]+"$caption);
        if(
    count($langArray) != $numberOfLanguages)
        {    
    // the separation of the different languages has failed        
            
    return FALSE;
        }
        
        return 
    $langArray;
    }



    /************************************************************************************************/
    /* getImageComments:    This function get the iptc caption of a file and return an array        */
    /*                             with the separated languages                                        */
    /* return $separatedCaptions                                                                    */
    /************************************************************************************************/
    function getImageComments$image_path$numberOfLanguages="1" ) {
      
        
        
    // Initialisation of the variable $separatedCaptions
        
    for( $iTab $iTab $numberOfLanguages $iTab++)
        {
            
    $separatedCaptions[$iTab] = "";
        }
        
        
    //Get the caption from file
        
    $caption getCaptionFromFile($image_path);
        if( !
    $caption)
        {
            echo 
    "WARNING : ".$image_path." CANNOT GET CAPTION DATA\n";
            return 
    $separatedCaptions;
        }
        
        
        
    //Separate the different languages in the caption, if required
        
    if ( $numberOfLanguages 1)
        {
            
    $separatedCaptions separateLanguagesInCaption$caption$numberOfLanguages );
            if ( !
    $separatedCaptions )
            {
                echo 
    "WARNING : ".$image_path." CANNOT SEPARATE THE DIFFERENT LANGUAGES\n";
                return 
    $caption;
            }
        }
        else
        {   
    //only one language
            
    $separatedCaptions[0] = $caption;
        }
        
        
        return 
    $separatedCaptions;
    }

    ?>
    Dernière édition par none77 à 27/11/2007, 14h07

    Commentaire


    • #3
      cool c'est vraiment interessant tous ca !!!
      Dernière édition par y.berges à 19/11/2007, 17h36
      Société : http://www.com3elles.com
      Bénévole : http://www.flexicontent.org

      Commentaire


      • #4
        Petite explication

        Pour utiliser ce code, il y a 3 champs à remplir. Dans le fichier main.php, renseignez les variables suivantes avec vos données:
        Code:
        //VARIABLES
        $photosFolder="Z:\\Photos\\vacances\\";
        $galleryName="NomDeLaGalerie";
        $galleryDescription="Ici je mets la description de la galerie";

        Pour pour exécuter le script, il n'y a rien de spécial, c'est une exécution standard d'un script PHP. Il faut donc avoir l'exécutable PHP installé sur la machine sur laquelle on souhaite exécuter le script.
        Exécuter le code en ligne de commande (genre commande DOS):
        C:\répertoireAdHoc\php.exe -f C:\lePath\versleScript\main.php

        Le fichier EXG_descriptions.xml est alors généré et contient les balises nécessaires ainsi que les commentaires de vos photos que vous aviez renseignés avec le logiciel de votre choix.
        Dernière édition par none77 à 20/11/2007, 09h15

        Commentaire


        • #5
          Préparer Jpegs pour Easy eXtended Gallery

          J'avais dit dans un autre fil que mes photos étaient "préparées" automatiquement pour l'affichage Web avec Easy eXtended Gallery.

          Donc en plus de générer le fichier EXG_descriptions.xml, j'utilise aussi des scripts php pour:
          - renommer mes fichiers jpegs avec la date et l'heure à laquelle le cliché a été prise.
          - optimiser les dimensions de mes photos pour la galerie. J'utilise des tailles différentes en fonction de l'orientation de mes photos. Ainsi que mes photos soit en portrait ou en paysage, je ne leur pas les même dimension pour optimiser l'affichade.

          J'ai donc écrit 2 petites fonctions.
          ATTENTION : ce script utilise des outils gratuits disponibles sur le net : jhead, mogrify and jpegtran. Sur mon PC, ils sont sur le "PATH" donc disponible depuis n'importe où en ligne de commande.

          Voici un exemple d'appel de ces 2 fonctions:
          Code PHP:
          <?php
          //Indiquer le répertoire où se trouve les photos
          $photosFolder="Z:\\Photos\\DossierOuSeTrouveMesPhotos\\";
          //Appel des fonctions
          renameJpegFilesWithDateTime($photosFolder);
          rotateAndResizeJpegFiles($photosFolder'800''600');
          ?>
          Voici le code de ces 2 fonctions:
          Code PHP:
          <?php

          /********************************************************************************************/
          /*    renameJpegFilesWithDateTime: this function rename the jpeg files with the date and time */
          /*      when the photos have been taken.                                                    */
          /*  REQUIRES : jhead                                                                        */
          /********************************************************************************************/
          function renameJpegFilesWithDateTime($folder)
          {
              
          system('jhead -n%Y%m%d_%H%M%S '.$folder.'\\*.jpg');
          }


          /********************************************************************************************/
          /*    rotateAndResizeJpegFiles: this function rotates the jpeg files and resize them.         */
          /*      To optimise the size of the photos, portrait and lanscape photos are not resized    */
          /*      to the same dimensions                                                              */
          /*  REQUIRES :                                                                              */
          /*      - jhead,                                                                            */
          /*      - jpegtran (for the -autorot option),                                               */
          /*      - mogrify (included in ImageMagik)                                                  */
          /********************************************************************************************/
          function rotateAndResizeJpegFiles($folder$landscapeHeight$portraitHeight)
          {   
              
          /* autorotate with the information in the EXIF orientation tag*/     
              
          system('jhead -autorot '.$folder.'\\*.jpg');
              
              
          /* resize lanscape jpegs files */
              
          system('jhead -cmd "mogrify -resize '.$landscapeHeight.'x'.$landscapeHeight.' -quality 90 &i" -orl '.$folder.'\\*.jpg');
              
          /* resize portrait jpegs files */
              
          system('jhead -cmd "mogrify -resize '.$portraitHeight.'x'.$portraitHeight.' -quality 90 &i" -orp '.$folder.'\\*.jpg');
          }

          ?>
          Donc voilà, j'ai personnellement ajouté l'appel de ces 2 fonctions dans mon fichier main.php (décrit dans le 1er post de ce fil) et je suis la "procédure" suivante:
          - je mets les photos dont je souhaite faire une galerie dans un répertoire
          - je renseigne les 3 variables que le fichier main.php requière.

          et tada! C'est déjà fini! les photos sont prêtes pour EXG et le fichier EXG_descriptions.xml est prêt aussi!
          Dernière édition par none77 à 27/11/2007, 14h03

          Commentaire

          Annonce

          Réduire
          1 sur 2 < >

          C'est [Réglé] et on n'en parle plus ?

          A quoi ça sert ?
          La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

          Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

          Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
          Comment ajouter la mention [Réglé] à votre discussion ?
          1 - Aller sur votre discussion et éditer votre premier message :


          2 - Cliquer sur la liste déroulante Préfixe.

          3 - Choisir le préfixe [Réglé].


          4 - Et voilà… votre discussion est désormais identifiée comme réglée.

          2 sur 2 < >

          Assistance au forum - Outil de publication d'infos de votre site

          Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

          Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

          Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

          UTILISER À VOS PROPRES RISQUES :
          L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

          Problèmes connus :
          FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

          Installation :

          1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

          Archive zip : https://github.com/AFUJ/FPA/zipball/master

          2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

          3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

          4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

          5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

          6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
          et remplacer www. votresite .com par votre nom de domaine


          Exemples:
          Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
          Télécharger le script fpa-fr.php dans: /public_html/
          Pour executer le script: http://www..com/fpa-fr.php

          Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
          Télécharger le script fpa-fr.php dans: /public_html/cms/
          Pour executer le script: http://www..com/cms/fpa-fr.php

          En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

          Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
          Voir plus
          Voir moins
          Travaille ...
          X