• [^] # Re: Super

    Posté par . En réponse à la dépêche Sortie de PhotoShow 3.0. É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