Sortie de PhotoShow 3.0

Posté par . Édité par Xavier Teyssier, palm123 et Xavier Claude. Modéré par tuiu pol. Licence CC by-sa
45
7
juil.
2014
Technologie

PhotoShow est une galerie photos/vidéos auto-générée, en PHP, sous licence GPL.

Elle est munie d'un design clair et efficace, à la fois sur ordinateur de bureau et sur téléphone portable. Il vous suffit d'un serveur web avec PHP5 et libgd (pour la génération de vignettes). Pas d'installation, deux lignes de configuration. Elle est pas belle, la vie ?

Fonctionnalités

PhotoShow se base exclusivement sur le système de fichiers (pas de base de données, et déplacement/ajout/suppression des photos simplifié). La version 3 amène son lot d'innovations, avec entre autres :

  • design "reponsive" : le site fonctionne aussi bien sur mobile que sur ordinateur de bureau ;
  • support de Google PhotoSphere ;
  • flux RSS ;
  • themes.

Ces fonctionnalités s'ajoutent à celles déjà existantes, telles que :

  • gestion des droits utilisateurs et groupes utilisateurs ;
  • upload de fichiers par glisser-déposer ;
  • commentaires ;
  • très simple à configurer (deux lignes) et utiliser.

Mise en place

  • récupérez PhotoShow : git clone https://github.com/thibaud-rohmer/PhotoShow.git ;
  • créez un dossier dans lequel PhotoShow pourra générer les paramètres (votre serveur doit avoir les droits d'écriture dans ce dossier) ;
  • dans le dossier de PhotoShow, éditez config.php : indiquez le chemin vers votre dossier de photos (par sécurité, mettez-le en dehors du chemin accessible sur le web), ainsi que le dossier créé juste avant ;
  • allez sur votre site avec votre navigateur : vous pouvez maintenant créer le compte principal (qui permettra d'administrer le site) ;
  • votre site est prêt.
  • # Étiquettes

    Posté par (page perso) . Évalué à 2.

    Une idée de fonctionnalité : le possibilité de définir des étiquettes (tags) pour les photos. Ça peut être mis en œuvre par des liens symboliques je pense.

    • [^] # Re: Étiquettes

      Posté par (page perso) . Évalué à 3.

      Pour être plus précis, une photo marquée par exemple « bourré » pourrait être liée dans un répertoire tags/bourré, et, à son emplacement original, être accompagnée d'un fichier .tags contenant la liste des mots-clefs avec lesquels elle a été marquée, ici « bourré » donc :

      $ find
      photos/
      photos/réveillon2008
      photos/réveillon2008/IMG_4212.JPG
      photos/réveillon2008/IMG_4212.JPG.tags
      tags/
      tags/bourré
      tags/bourré/réveillon2008_IMG_4212.JPG -> ../../photos/réveillon2008/IMG_4212.JPG
      $ cat photos/réveillon2008/IMG_4212.JPG.tags
      bourré
      • [^] # Re: Étiquettes

        Posté par . Évalué à 3.

        Les tags sont effectivement une fonctionnalité qu'on m'a souvent demandé. Mais je réfléchis encore quant à l'implémentation. Cette facon de faire n'est pas optimale pour une "recherche par tag", par exemple.

        • [^] # Re: Étiquettes

          Posté par . Évalué à 3.

          La recherche par tag est un simple ls dans /tags//. C'est l'avantage du lien dans les 2 sens: de photo à tags et de tag à photos.

          • [^] # Re: Étiquettes

            Posté par (page perso) . Évalué à 4.

            À noter que si j'aime bien l'idée de liens symboliques qui permettent une utilisation transparente même hors de Photoshow, la même fonctionnalité serait obtenue par un fichier par mot-clef, listant les photos marquées avec ce mot-clef.

            • [^] # Re: Étiquettes

              Posté par (page perso) . Évalué à 1.

              Je viens de tester et je crois que je vais l'adopter en remplacement de l'usine à gaz qu'est devenu zenphoto (il ont perdu l'esprit zen du départ…).

              Il y a juste 3 fonctions qui me manque un peu:
              - la principale c'est les étiquettes que j'utilise de plus en plus avec Digikam. Elles sont incluse dans les fichiers dans les tag IPTC (Keywords) et XMP (hierarchicalSubject, Tags List, Subject).

              • de la même façon, j'inclus aussi le titre (IPTC: Object Name; XMP: Title) et la description (IPTC: Caption; XMP: Description, Image Description) des photos. Ca il y a peut-être moyen de tuner un peu l'interface actuelle pour les faire apparaître dans les données de la photo ? (perso, le type APN utiliser me laisse un peu de marbre ;) ).

              • un peu mois important, mais c'est un gadget que j’apprécie : la petite carte de géolocalisation. 95% de mes photos ces dernière années sont des photos de randonnée ou de voyage, géotagguée. Ps bloquant en ce qui me concerne, mais bon…

              En fait là où PhotoShow est très proche de mon cahier des charges pour un webalmbum, c'est :
              - répertoire photo qu'il suffit de synchronisé peu importe le moyen (chez moi ce sera Owncloud, sur le même serveur)
              - vitesse, simplicité de l'interface mais quand même un design moderne
              - pas besoin de gestion des utilisateur (un seul: moi) ou des commentaires (juste pouvoir les désactiver, s'il sont possibles)
              - libre ;)

              MERCI pour ce programme!

  • # Super

    Posté par . Évalué à 6.

    Le logiciel s'est vraiment amélioré depuis sa première présentation est c'est exactement le type de galerie que je recherchais.

    Bon boulot.

    • [^] # Re: Super

      Posté par . Évalué à 6.

      Merci ! Beaucoup de travail a été fait depuis cette présentation en effet. On peut également remercier la communauté sur github pour ca.

    • [^] # Re: Super

      Posté par . Évalué à 2.

      c'est exactement le type de galerie que je recherchais.

      Idem, je viens de l'installer sur ma cubieboard-serveur, elle a un peu de mal pendant la génération des photos, mais après ça va nickel !

      • [^] # Re: Super

        Posté par . Évalué à 1.

        Par contre, au bout d'un moment, le navigateur tombe en timeout pendant la génération forcée des vignettes.

      • [^] # Re: Super

        Posté par . Évalué à 3.

        Idem, cette galerie très agréable pour notre utilisation familiale, après 1 journée d'essais nous l'avons adoptée.

        Est-il possible de lancer la génération des vignettes en ligne de commande ? (directement en lançant un php ou en faisant faire le taf à imagemagick jpg 200x200 ?)
        Comme ça je pourrai la lancer en nice et ionice après rsync d'un répertoire de photos, mon petit ks2g appréciera :)

        Merci à toi Thibaud.

        • [^] # Re: Super

          Posté par . Évalué à 4.

          Yay ! Content que ca vous plaise !

          De mémoire, quelqu'un avait mis cela en place, mais je ne le retrouve pas… Enfin, faire un script bash qui génère les vignettes auto et la place dans les bons dossier, ca doit pas etre bien complexe. Je verrai pour le faire (sinon, si quelqu'un le fait, on pourra l'ajouter au repo git).

          • [^] # Re: Super

            Posté par . Évalué à 2.

            Autant exposer une api batch et utiliser bash que pour faire des wget, non? implémenter 2 fois la logique de création des miniatures n'est probablement pas idéal.

            • [^] # Re: Super

              Posté par . Évalué à 1.

              Oui, c'est vrai.
              Après, le makefile à l'avantage de pouvoir fonctionner sur une machine + puissante, sans avoir à charger le serveur-cubieboard pendant des heures/jours/semaines

          • [^] # Re: Super

            Posté par . Évalué à 1.

            J'imagine qu'un simple Makefile avec du convert -scale à l'intérieur doit faire l'affaire.
            En plus, make, c'est magique, ça parallélise à mort :)
            Je regarderais ça.
            (D'après ce que je vois, les vignettes sont en 200x200 et les _small en 1200 max, c'est assez facile avec convert)

          • [^] # Re: Super

            Posté par (page perso) . Évalué à -7.

            Enfin, faire un script bash

            Un script shell. Il est totalement inutile de forcer l'utilisation de Bash pour des choses aussi simples, et utiliser Bash par défaut parce qu'on n'est pas sûr de faire du code portable, c'est une solution de fainéant.

            • [^] # Re: Super

              Posté par . Évalué à 4.

              Non, c'est un choix de langage comme un autre… tant que le script commence avec #! /bin/bash.

            • [^] # Re: Super

              Posté par . Évalué à 4.

              Mouaih je suis sceptique sur l'intérêt de s'interdire d'utiliser les ajouts de bash par rapport au bourne shell pour ce genre de script qui n'est pas franchement proche du système et peut par exemple tirer partie des substitutions ## %% # % dans les expansions de variables ou imbriquer des $( ) ou des tests avec des doubles crochets pour matcher une chaîne avec un pattern (la liste est longue).
              http://www.gnu.org/software/bash/manual/bash.html#Major-Differences-From-The-Bourne-Shell

              Je pourrais même comprendre que la personne qui va faire le dev choisisse un langage de plus haut niveau tel que python ou ruby (même si perso je le ferais en bash).

              • [^] # Re: Super

                Posté par (page perso) . Évalué à 4.

                Merci du bel exemple de méconnaissance du shell standard et d'utilisation inutile de Bash :

                par exemple tirer partie des substitutions ## %% # % dans les expansions de variables

                C'est pris en charge par les shells standard.

                imbriquer des $( )

                Ça aussi c'est standard (chercher “nested”).

                ou des tests avec des doubles crochets pour matcher une chaîne avec un pattern (la liste est longue)

                Ça, c'est une bonne raison. Quand on en a besoin, ce qui n'est pas toujours le cas.

                Je n'ai jamais dit qu'il était inutile de coder pour Bash, mais seulement que, lorsqu'on n'a pas besoin de ses fonctionnalités spécifiques, forcer l'utilisation de Bash plutôt que de cibler n'importe quel shell standard était surtout une marque de fainéantise.

                • [^] # Re: Super

                  Posté par . Évalué à 1. Dernière modification le 10/07/14 à 21:17.

                  Je prends acte de mon erreur, mais je ne vais pas lâcher bash pour sh pour autant, désolé.

                  Aller une dernière pour la route:

                  echo info > /dev/udp/mon-serveur-de-log/4242

              • [^] # Re: Super

                Posté par (page perso) . Évalué à 3.

                un langage de plus haut niveau tel que python ou ruby

                Perl le faisait déja il y a vingt ans.

                * Ils vendront Usenet^W les boites noires quand on aura fini de les remplir.

                • [^] # Re: Super

                  Posté par . Évalué à 1.

                  Pardon de n'avoir pas cité Perl. Cela-dit Python est à peine plus jeune que Perl, hein.

          • [^] # Re: Super

            Posté par . Évalué à 2.

            Hello,

            J'ai fait pour mon besoin un script bash de fainéant, testé cette nuit sur ma ks2g, 4000 photo traitées, soit 8000 convert effectués sur des images jpeg de 6Mo en 4h sur ma pauvre KS2G. Avantage : ça parallélise grâce à convert au contraire de gd/php, et surtout on peut le lancer en nice et ionice pour préserver les ressources pour les autres processes.

            Alors le script est perfectible : je n'ai pas trouvé comment gérer le compteur autrement que par fichier, sinon l'incrément des processus child ne remonte pas au principal ; il est probablement un peu crade (coder n'est pas mon métier), mais il fonctionne.

            Après le premier essai de cette nuit, j'ai vu des améliorations à effectuer : en cas d'ajout d'un répertoire, et d'une volumétrie importante de photos… ben c'est long, il va tester si les fichiers small et thumbs existent et les créer le cas échéant. Il y a surement une meilleure manière de faire. Il faudrait également laisser la possibilité de passer en paramètre un nom de répertoire. Il y a la conversion des videos en webm via ffmpeg aussi. Et sûrement d'autres choses.

            Ah oui, j'ai fait un chmod -R 640 sur le répertoire Thumbs ensuite pour qu'httpd puisse lire les images (dans mon cas le script est lancé par le user avec lequel j'ai installé PhotoShow, ce user fait partie du groupe http)

            #!/bin/bash
            # Ce script effectue les générations de vignettes 200x200 et les images small 1200x1200^ pour PhotoShow
            # Il doit être copié dans le répertoire que l'on créé à l'installation de PhotoShow (celui qui contient les répertoires Conf et Thumbs)
            # et exécuté depuis celui-ci
            #
            # licence : fait_a_la_rache_mais_ca_marche_faites_en_ce_que_vous_voulez
            
            image_dir=`awk -F '[""]' '/photos_dir/{print $2}' ../config.php`
            thumbs_dir=`pwd`/Thumbs/
            compteur=0
            
            # pre-requis
            for dir in $image_dir $thumbs_dir ; do
              [ ! -d $dir ] && echo "Erreur, le répertoire d'images $dir n'existe pas" && exit 1
            done
            
            for binaire in convert ffmpeg ; do
              if ( ! which $binaire > /dev/null 2>&1 )
                then echo "Erreur, le binaire $binaire est introuvable dans le \$PATH" && exit 1
              fi
            done
            
            # creation de la structure des répertoires
            rsync -r --include '*/' --exclude '*' $image_dir/ $thumbs_dir
            
            # pour toutes les images présentes dans ce répertoire, créer une miniature 200x200 et un small 
            cd $image_dir
            find . -print0 | while IFS= read -rd '' f ; do
              if file "$f" | grep -o -P '^.+: \w+ image' >/dev/null ; then
                if [ ! -f ${thumbs_dir}/"$f" ] ; then
                  echo -en "$f : \tvignette "
                  if ( convert $image_dir/"$f" -thumbnail 200x200^ -gravity center -extent 200x200 -auto-orient -quality 70 ${thumbs_dir}/"$f" )
                    then echo -en "OK\t" 
                    else echo -en "Erreur !\t"
                  fi
                fi
                if [ ! -f "${thumbs_dir}/`echo "$f" | sed 's/\(.*\)\./\1\_small./'`" ] ; then
                  echo -n "small "
                  if ( convert $image_dir/"$f" -thumbnail 1200x1200 -auto-orient -quality 70 "${thumbs_dir}/`echo "$f" | sed 's/\(.*\)\./\1\_small./'`" )
                    then echo -en "OK\n" 
                    else echo -en "Erreur !\n"
                  fi
                fi
                export compteur=`expr $compteur + 1`
              fi
            echo $compteur > /tmp/compteur
            done
            echo "Script terminé, `cat /tmp/compteur` images ont été traitées"
            \rm /tmp/compteur
            • [^] # Re: Super

              Posté par . Évalué à 3.

              Très vite fais, tu as un sous shell avec le pipe et donc les variables que tu modifie dans ce sous shell ne sont pas accessible à ton shell, on pourrait probablement améliorer un peu comme ça :

              #!/bin/bash
              # Ce script effectue les générations de vignettes 200x200 et les images small 1200x1200^ pour PhotoShow
              # Il doit être copié dans le répertoire que l'on créé à l'installation de PhotoShow (celui qui contient les répertoires Conf et Thumbs)
              # et exécuté depuis celui-ci
              #
              # licence : fait_a_la_rache_mais_ca_marche_faites_en_ce_que_vous_voulez
              
              image_dir=`awk -F '[""]' '/photos_dir/{print $2}' ../config.php`
              thumbs_dir=`pwd`/Thumbs/
              compteur=0
              
              function convert() {
              while IFS= read -rd '' f ; do
                if file "$f" | grep -o -P '^.+: \w+ image' >/dev/null ; then
                  if [ ! -f ${thumbs_dir}/"$f" ] ; then
                    echo -en "$f : \tvignette "
                    if ( convert $image_dir/"$f" -thumbnail 200x200^ -gravity center -extent 200x200 -auto-orient -quality 70 ${thumbs_dir}/"$f" )
                      then echo -en "OK\t" 
                      else echo -en "Erreur !\t"
                    fi
                  fi
                  if [ ! -f "${thumbs_dir}/`echo "$f" | sed 's/\(.*\)\./\1\_small./'`" ] ; then
                    echo -n "small "
                    if ( convert $image_dir/"$f" -thumbnail 1200x1200 -auto-orient -quality 70 "${thumbs_dir}/`echo "$f" | sed 's/\(.*\)\./\1\_small./'`" )
                      then echo -en "OK\n" 
                      else echo -en "Erreur !\n"
                    fi
                  fi
                fi
              done
              }
              
              # pre-requis
              for dir in $image_dir $thumbs_dir ; do
                [ ! -d $dir ] && echo "Erreur, le répertoire d'images $dir n'existe pas" && exit 1
              done
              
              for binaire in convert ffmpeg ; do
                if ( ! which $binaire > /dev/null 2>&1 )
                  then echo "Erreur, le binaire $binaire est introuvable dans le \$PATH" && exit 1
                fi
              done
              
              # creation de la structure des répertoires
              rsync -r --include '*/' --exclude '*' $image_dir/ $thumbs_dir
              
              # pour toutes les images présentes dans ce répertoire, créer une miniature 200x200 et un small 
              cd $image_dir
              nb=$(find . -type f -print0 | convert | grep -c)
              echo "Script terminé, $nb images ont été traitées"

              Par contre ce n'est pas testé.

              Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

            • [^] # Re: Super

              Posté par (page perso) . Évalué à 0.

              J'ai fait pour mon besoin un script bash de fainéant

              C'est le cas de le dire : je suis heureux de t'apprendre que tu n'as utilisé aucune fonctionnalité spécifique à Bash, et que ton script est tout à fait utilisable avec n'importe quel shell standard. Tu peux mettre #! /bin/sh en tête.

              Ah, et juste une remarque, pour les substitutions de commandes la syntaxe avec des accents graves est caduque, mieux vaut utiliser $(…) qui facilite l'écriture de doubles substitutions quand on en a besoin.

              • [^] # Re: Super

                Posté par . Évalué à 5.

                Et moi je suis heureux de t'apprendre que lorsqu'on veut faire passer un message, on évite la condescendance. En tant normal ça m'aurait sûrement intéressé d'apprendre les spécificités des différents shells, là je m'en fous.

                • [^] # Re: Super

                  Posté par (page perso) . Évalué à 4.

                  C'est toi qui a commencé à qualifier ton script de fainéant… Bon, désolé pour la condescendance, en tout cas voici une référence à ce sujet : https://wiki.ubuntu.com/DashAsBinSh

                  En gros, les bashismes les plus fréquents dans les scripts, remplaçables par des fonctions standards, sont :

                  • [[ … ]] pour les tests : utiliser [ … ] à la place ;
                  • function FUNCNAME pour définir des fonctions : utiliser FUNCNAME() à la place ;
                  • source LIBRARY : utiliser . LIBRARY à la place.

                  Et quelques bashismes qui ne sont pas remplaçables de façon simple :

                  • certaines formes de développement de variables, par exemple ${VAR/pattern/replacement}, qu'on peut souvent remplacer par plusieurs remplacements de fin et de début ;
                  • certains tests, notamment [[ CHAINE == MOTIF ]], qu'on peut remplacer par un appel à grep, mais c'est justement là un cas où il est probablement plus efficace de garder Bash ;
                  • $RANDOM, qu'on peut remplacer par des trucs pas franchement triviaux, mais c'est également un cas où il peut être pertinent de garder Bash.

                  Au passage, notez que pour les tests avec la commande test, alias [ … ], les combinaisons intégrées sont marquées caduques par POSIX, et qu'il faut utiliser les combinaisons externes && et || à la place. Soit, au lieu de :

                  test -e "$file1" -o -e "$file2"

                  utiliser :

                  test -e "$file1" || test -e "$file2"
                  • [^] # Re: Super

                    Posté par . Évalué à 2.

                    Ok pas de souci, c'était plus pour te faire réagir : traiter de fainéant les personnes qui n'ont pas d'intérêt pour un sujet, c'est les braquer la plupart du temps au lieu de faire naître cet intérêt chez elles.

                    Merci pour ces informations, j'apprends qu'en fait dans la plupart des scripts que j'écris je peux effectivement remplacer le shebang bash par sh. Dans les exemples que tu cites, il n'y a bien que le test == ou != que j'utilise fréquemment qui sont spécifiques à Bash.

                    • [^] # Re: Super

                      Posté par (page perso) . Évalué à 2.

                      Ok pas de souci, c'était plus pour te faire réagir : traiter de fainéant les personnes qui n'ont pas d'intérêt pour un sujet, c'est les braquer la plupart du temps au lieu de faire naître cet intérêt chez elles.

                      En fait ce ne sont pas les personnes qui sont fainéantes, c'est leur choix qui relève de la solution de facilité, ce qui est compréhensible pour un domaine qui n'a pas leur intérêt principal.

                      À une époque, les gens écrivaient des scripts shells sans se poser de question, et comme Bash était le shell d'exécution des scripts par défaut, ils ne se rendaient pas compte qu'ils utilisaient plein de bashismes et que leurs scripts ne fonctionnaient pas sur d'autres shells.

                      Puis, Ubuntu, et ensuite Debian, ont décidé d'installer Dash, un shell plus restreint et plus léger, à la place de Bash comme interpréteur des scripts par défaut. Du coup, des tas de scripts se sont trouvés ne plus fonctionner. Il y avait alors deux façons de régler ce genre de problème :

                      • la bonne, qui consistait à traquer les bashismes, et, s'il n'y avait pas de raison majeure de les maintenir, de les remplacer par des formes standard ;
                      • la mauvaise, consistant à ne pas se poser de question et à forcer l’interprétation par Bash.

                      Ça, c'était pour les scripts existants. Le problème, c'est que cette seconde solution de facilité est rentrée dans les mœurs au point que des gens ont pris l'habitude de coder leurs scripts pour Bash sans réfléchir, même en n'utilisant aucun bashisme !

                      Pour les nouveaux scripts, la bonne attitude consiste à coder pour sh, en évitant les bashismes évidents : si on n'a pas bien l'habitude, ça échouera à l'exécution, et avec un coup de checkbashisms on pourra voir ce qu'il faut corriger. On s'y fait rapidement, et au bout de très peu de temps on sait coder pour sh sans faire de bashismes.

                      • [^] # Re: Super

                        Posté par (page perso) . Évalué à 2.

                        Notez qu'il y existe d'excellentes raisons de coder pour Bash, parce que tous les bashismes n'ont pas d'équivalent directs. Parfois, un bashisme ne peut être remplacé que par une série d'appels externes, qui sont plus coûteux que d'appeler Bash pour faire tout ça. Mais ce n'est pas souvent le cas, et la plupart des bashismes n'ont aucune raison d'être. Sans compter les scripts qui ne comportent déjà aucun bashisme !

                  • [^] # Re: Super

                    Posté par . Évalué à -2.

                    Bon, désolé pour la condescendance,

                    Pas la peine de t'excuser de quelque chose que tu n'as pas commis. Il n'a pas compris que tu signifiais juste que c'était à ton avis mieux de ne pas utiliser les spécificités d'un shell, et que tu ne le traitais pas de quoi que ce soit.

                    • [^] # Re: Super

                      Posté par (page perso) . Évalué à 3.

                      Pas la peine de t'excuser de quelque chose que tu n'as pas commis.

                      Si si, je plaide coupable, c'était condescendant et j'en suis désolé. Je sais ce que je pense quand j'écris, tout de même !

                      • [^] # Re: Super

                        Posté par . Évalué à 1.

                        Si si, je plaide coupable, c'était condescendant

                        Tu es vraiment nul en condescendance, alors. Je donne des leçons si tu veux. :-)

              • [^] # Re: Super

                Posté par (page perso) . Évalué à 3.

                pour les substitutions de commandes la syntaxe avec des accents graves est caduque, mieux vaut utiliser $(…)

                Caduque ? Je l'apprend moi-même. Aurais-tu un lien qui en dit plus sur le sujet ?

                • [^] # Re: Super

                  Posté par (page perso) . Évalué à 3. Dernière modification le 09/07/14 à 15:57.

                  Non, j'ai visiblement un peu sur-interprété ce que j'avais lu, dans le manuel de Bash d'ailleurs. Ils qualifient la forme avec des accents graves d'ancienne. Ce qui est exact, dans le sens où elle est plus ancienne que celle avec des parenthèses, qui a probablement été introduite pour faciliter l'imbrication de substitutions de commandes.

                  Bref, aujourd'hui on peut utiliser les deux, mais mieux vaut à mon avis utiliser la syntaxe moderne, qui n'a à ma connaissance par d'inconvénient et qui a un avantage très net pour des substitutions imbriquées, ce qui peut être utile à l'occasion.

            • [^] # Re: Super

              Posté par . Évalué à 2.

              J'arrive un peu tard, mais je viens d'en avoir besoin, donc voici un petit makefile qui génère les vignettes.
              J'ai repris sans vergogne les commandes "convert" du script au dessus.
              Le seul avantage qu'il a par rapport au script, c'est qui est parallélisable, et suivant le nombre de photos, c'est pas du luxe !

              # Makefile pour générer les vignettes et les "petites" images PhotoShow
              #
              # Les répertoires PHOTO_DIR et THUMBS_DIR doivent être renseignés.
              #
              # NB: les espaces (et sûrement quelques caractères spéciaux également)
              #     NE SONT PAS SUPPORTÉS !
              #
              # En plus, une seule extension est possible pour les fichiers d'entrée
              # (par défaut .JPG)
              #
              # Le truc sympa, c'est le make -j 8 (ou plus suivant le nombre de CPUs)
              #
              # licence : Beerware
              #
              
              PHOTO_DIR ?= photo_dir
              THUMBS_DIR ?= generated/Thumbs
              
              IN_EXT ?= .JPG
              OUT_THUMB_EXT ?= .JPG
              OUT_SMALL_EXT ?= _small.JPG
              
              # images en entrée
              IN_IMAGES = $(shell find $(PHOTO_DIR) -type f -name "*$(IN_EXT)")
              
              # images en sortie
              OUT_THUMB_IMAGES = $(patsubst $(PHOTO_DIR)/%$(IN_EXT),\
                         $(THUMBS_DIR)/%$(OUT_THUMB_EXT), $(IN_IMAGES))
              OUT_SMALL_IMAGES = $(patsubst $(PHOTO_DIR)/%$(IN_EXT),\
                         $(THUMBS_DIR)/%$(OUT_SMALL_EXT), $(IN_IMAGES))
              
              all: small thumb
              
              small: $(OUT_SMALL_IMAGES)
              
              thumb: $(OUT_THUMB_IMAGES)
              
              $(THUMBS_DIR)/%$(OUT_SMALL_EXT): $(PHOTO_DIR)/%$(IN_EXT)
                  @mkdir -p $(dir $@)
                  @echo Generating $@
                  @convert $< -thumbnail 1200x1200 -auto-orient -quality 70 $@
              
              $(THUMBS_DIR)/%$(OUT_THUMB_EXT): $(PHOTO_DIR)/%$(IN_EXT)
                  @mkdir -p $(dir $@)
                  @echo Generating $@
                  @convert $< -thumbnail 200x200^ -gravity center -extent 200x200 -auto-orient -quality 70 $@
              • [^] # Re: Super

                Posté par . Évalué à 1.

                Hello, pas trop tard, on lit toujours ;)
                Le script n'est pas parallélisé en soi, mais les convert et autres ffmpeg le sont, j'ai donc les 4 core de l'atom de ma ks2g qui tournent au taquet.

  • # Pas mal :)

    Posté par (page perso) . Évalué à 2.

    Bon projet, je testerai un jour…

    Pour l'instant, j'utilise photofloat qui est d'une rapidité bluffante et surtout "responsive design" de par son interface simplissime.
    http://photos.jasondonenfeld.com/#!/

    • [^] # Re: Pas mal :)

      Posté par (page perso) . Évalué à 3.

      Pourquoi "surtout responsive design"? PhotoShow l'est tout autant.

    • [^] # Re: Pas mal :)

      Posté par . Évalué à 5.

      Dans le lien que tu donnes j'ai pas trouvé de responsive design. Juste des image posées telles quelles pour laisser le navigateur les répartir en ligne.
      Alors que PhotoShow fait disparaître des élément d'interface quand l'écran (ou la fenêtre du navigateur) est de faible largeur.

      L'argument "il n'y a rien à faire disparaître" se tien, par contre le lien que tu montre ne gère pas non plus les écrans très larges: sur du full hd ou au-delà comme t'as des vignettes sur toute la largeur on n'y voit plus rien, faut bouger la tête tout le temps et pas juste les yeux (même défaut que, par exemple, wikipédia qui ne met pas le texte en plusieurs colonnes sur les écrans larges et rend donc la lecture pénible). Au contraire si l'écran est très/trop large, PhotoShow affiche moins de vignettes mais en plus grande résolution, ce qui reste lisible aussi (suffit de se reculer) et gère correctement les écrans à très haute résolution (Retina chez Apple, 3k ou 4k chez les autres) car dans ce cas si on ne met pas des images plus grosses c'est illisible par un œil humain.

      Bref le responsive design c'est pas ce que tu dis ;-)

      • [^] # Re: Pas mal :)

        Posté par (page perso) . Évalué à -1.

        t'as des vignettes sur toute la largeur on n'y voit plus rien

        Ctrl + molette…

        • [^] # Re: Pas mal :)

          Posté par . Évalué à 5.

          Il m'arrive de vouloir montrer des photos à des personnes qui ne pensent pas à faire contrôle+molette (ni à installer Linux elles-mêmes sur leur PC d'ailleurs, des imbéciles, je ne devrait pas leur parler en fait, ou leur envoyer mes photos sur papier par la poste).

        • [^] # Re: Pas mal :)

          Posté par (page perso) . Évalué à 5.

          Ou pas : Ctrl + molette ça zoome à partir de la taille normale, donc ça fait des images floues.

  • # Pas mal

    Posté par . Évalué à 2.

    Le produit est rapide et intuitif, comme annoncé. Comparé à Piwigo, on passe de la complexité à la simplicité en très peu de temps.

    Par contre, ça manque de finitions: la localisation laisse à désirer, même en fr, et les vidéos déjà en webm ne sont pas centrées.

    • [^] # Re: Pas mal

      Posté par . Évalué à 3.

      Je trouve également çà vraiment pas mal!

      Par contre, j'aimais bien la fonctionnalité permettant d'avoir un aperçu de plusieurs images par survol de l'image de l'album avec la souris qu'il y avait dans les précédentes version et je trouve ça dommage que ce ne soit pas présent (et activé par défaut).

      Et je trouve que la façon dont est affiché les commentaires (dans un bandeau à droite) n'est vraiment pas bonne :(
      Il n'y a pas assez de largeur… Peut-être déjà afficher les commentaires sur tout la colonne pour que cela soit plus lisible et donc faire ressortir l'auteur du commentaire d'une autre couleur.

      J'ai remarqué un bug également (au moins sur firefox) qui fait que lorsqu'on survol le menu "Not logged in!", ça décale l'aperçu de la photo juste en dessous.

      • [^] # Re: Pas mal

        Posté par . Évalué à 1.

        Merci !

        L'affichage des images au survol a été viré car jugé trop "lourd" (par moi). Je sais que ca plaisait, mais je trouvais que ca ralentissait beaucoup (a la fois a cause du PHP qui devait chercher les images disponibles (gestion des droits…), mais également en JS qui devait gérer ca). Je ne pense pas le remettre, du moins pas tant que je n'ai pas trouvé une solution "efficace".

        L'affichage des commentaires : totalement d'accord, je vais probablement retravailler cela.

  • # vignettes peu visibles

    Posté par . Évalué à 3.

    Très cool.
    Juste un petit défaut à mon goût: c'est un peu dommage que les aperçus mignatures de photos dans la navigation soient rendus fades par la transparence, ça évite de mettre un curseur sur la photo en cours mais du coup, la fonction d'aperçu des vignette est un peu limité (on n'y voit rien tant qu'on n'a pas cliqué).
    Enfin c'est une affaire de goûts aussi…

    • [^] # Re: vignettes peu visibles

      Posté par . Évalué à 3.

      Comme dit, c'est une affaire de gout, et donc… Ca tombe bien ! Les thèmes sont la pour ca ! C'est possible de virer cet effet en 2 lignes de CSS simplement.

  • # navigation cassée

    Posté par . Évalué à 10.

    PhotoShow a un défaut malheureusement courant sur ce type d'application : il casse la navigation avec les boutons précédent/suivant des navigateurs. C'est-à-dire, par exemple, que parfois cliquer sur le bouton de la flèche de gauche du navigateur n'emmène pas à la page visitée précédemment. Enfin, peut-être que cette utilisation est hasbeen, au même titre que l'utilisation de la barre d'URL…

    Sinon, puisqu'on est sur linuxfr, je peux me le permettre : http://validator.w3.org/check?uri=http%3A%2F%2Fwww.photoshow-gallery.com%2Fdemo%2F%3Ff%3DFrance%252FParis%252Fpicture-10.jpg&charset=%28detect+automatically%29&doctype=Inline&group=0. Result: 121 Errors, 7 warning(s).

    • [^] # Re: navigation cassée

      Posté par . Évalué à 1.

      J'utilise jamais le bouton back du navigateur, c'est has been.
      Par contre j'utilise en continue le bouton back de ma souris sous le pouce. ;-)

      C'est une idée de sondage linuxfr cela dit :-)

  • # Recherche

    Posté par . Évalué à 2.

    Bonjour,

    Je viens d'installer et de tester PhotoShow: c'est superbe !
    Cela fait 12 ans que j'utilise ids.sourceforge.net qui me convient parfaitement pour mes 12000 photos … mais qui a un aspect un peu ancien maintenant.

    La seule chose qui me manque est une fonction de recherche dans les commentaires.

    Merci

    Bernard

  • # Optimisation jpeg

    Posté par (page perso) . Évalué à 2.

    Au cas où (je n'ai pas vérifié si PhotoShow le faisait déjà), une petite astuce :

    Optimiser les images JPEG avec le mode progressif.

    Dans un script shell on peut faire ça avec la commande jpegtran :
    ```
    jpegtran -copy all -optimize -progressive source.jpg >dest.jpeg

    ```On gagne en taille de fichier, sans perte de qualité, et c'est plus agréable quand on a une connexion un peu lente, plutôt que de voir s'afficher l'image ligne par ligne :)

  • # Et les crédits ?

    Posté par (page perso) . Évalué à 2.

    Je l'utilise depuis ce journal, avec plaisir, c'est simple, efficace, joli, bref super.

    Il manque juste un pied de page avec les crédits (ou autre niveu mise en page, mais c'est là que je cherche ce genre d'info). Je n'ai pas la mémoire des noms et je me suis retrouvée à parler du soft à un ami, donc je cherche le nom… et là horreur, impossible de me rappeler où je l'ai trouvé et pas de crédit pour me rafraichir la mémoire ! !

    Enfin, ça ne fait pas si long, donc je me suis souvenu de cette dépêche.

    Mais les crédits, c'est bien, pour les amnésiques dans mon genre qui veulent conseiller Photoshow à leurs amis, pour le visiteur de passage qui se demande ce que c'est ce truc génial et où le trouver.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.