Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/09/2010, à 12:21

cracolinux

[Script] Générateur de galeries photo «GGalerie»

EDIT : Cette version est vieille et sale, voir plus loin ...


smile

Je vous présente ce script de génération de galeries photo largement inspiré d'un tuto du «Site du zéro».

Installation :

1-Copier le script dans un fichier vide et le rendre exécutable (chmod u+x)
2-Placer le fichier obtenu dans un répertoire du PATH (→ cf http://doc.ubuntu-fr.org/variables_d_environnement)

Utilisation :

Deux choix :

-GGalerie /ledossier/en/question [enter]

ou

-GGalerie [enter] puis renseignement du dossier à traiter

Rendu

On obtient un fichier «supergalerie.html» à la racine du dossier traité.


#!/bin/bash

IFS='
'

########################################################
#Acquisition chemin si pas déjà en argument#############
########################################################

if [[ $# = 1 ]]
then
chemin=$1
else
read -p "Chemin voulu:" chemin
fi



########################################################
#PARTIE 1###############################################
########################################################
###########generation de la liste de repertoire#########
########################################################

find "$chemin" -type d > "$chemin"/rep.txt

########################################################

########################################################
#PARTIE 2###############################################
########################################################
###########creation des dossiers mini et galerie.html###
########################################################


while read line
do

cd "$line"


ls *.jpg || ls *.JPG
if [[ "$?" = 0 ]]        # si il y a du jpeg
    then                    #alors
        if [ ! -d miniatures ]    ## si il n'y pas de dossier mini
        then                      #alors
        mkdir miniatures          # on cree le dossier mini
        fi                        ## is


        # En-tête HTML

    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
            <head>
                <title>Ma galerie</title>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <style type="text/css">
                a img { border:0; }
                </style>
            </head>
        <body><p>' > galerie.html
   
fi

# Génération des miniatures et de la page

for image in $(ls *.jpg *.JPG)
do
    convert "$image" -thumbnail '200x200>' miniatures/"$image"
    echo '<a href="'$image'"><img src="miniatures/'$image'" alt="" /></a> ' >> galerie.html
done

# Pied de page HTML

if [ -f galerie.html ]
then

echo '</p>
   </body>
</html>' >> galerie.html

fi


done < "$chemin"/rep.txt


###########################################
#PARTIE 3##################################
###########################################
##########le fichier final#################
###########################################

find "$chemin" -type f -name "galerie.html" > "$chemin"/supergal.txt

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
            <head>
                <title>Ma galerie</title>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <style type="text/css">
                a img { border:0; }
                </style>
            </head>
        <body><p>' > "$chemin"/supergalerie.html


while read line
    do

#deb test partie une miniature au hasard

        line2=$(echo $line | sed "s/galerie.html/miniatures\//")
        line3=$(ls $(echo $line2) | sort -R | head -n1)
        line4="$line2$line3"

#fin test

        echo '<a href="'$line'"><img src="'$line4'" alt="" /></a>' >> "$chemin"/supergalerie.html



    done < "$chemin"/supergal.txt


###########################################
####Nettoyage##############################
###########################################

rm "$chemin"/rep.txt
rm "$chemin"/supergal.txt

# sonnette

exit

à cela vient s'ajouter pour les feignants le script de nettoyage :

A utiliser dans le répertoire concerné.

#!/bin/bash

echo "Attention !!"
echo "a utiliser à la racine du répertoire concerné"

read -p "Continuer ? (y / n )" reponse
if [[ $reponse == "n" ]]
then
exit
fi

find . -type d -iname "miniatures" -exec rm -r {} \;
find . -type f -iname "galerie.html" -delete
find . -type f -iname "supergalerie.html" -delete


echo "done"
sleep 1
exit

Je compte sur vous pour les critiques constructives (ou pas) et les idées d'améliorations.
Faudrait que j'en fasse un script nautilus, mais je commence à rester de plus en plus sur les terminaux...

smile

Dernière modification par cracolinux (Le 24/03/2012, à 00:15)


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#2 Le 19/09/2010, à 20:28

cracolinux

Re : [Script] Générateur de galeries photo «GGalerie»

Alors, il pue mon script ?

big_smile


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#3 Le 19/09/2010, à 20:51

Atok

Re : [Script] Générateur de galeries photo «GGalerie»

Ben si tu pouvais nous montrer le résultat ça serait cool tongue

Hors ligne

#4 Le 19/09/2010, à 23:47

sputnick

Re : [Script] Générateur de galeries photo «GGalerie»

Il te reste beaucoup à apprendre surtout si tu garde ces mauvaises habitudes.

- pas assez du quotes sur les variables, nul besoin de toucher à IFS ( servant à masquer ses erreurs )
- pas d'indentation
-

ls *.jpg || ls *.JPG
if [[ "$?" = 0 ]]

ca faisait longtemps que j'avais pas vu un truc aussi crade pour tester la présence de fichiers
-

for image in $(ls *.jpg *.JPG)

useless use of ls awards alors qu'un glob suffit
- pourquoi utiliser le XHTML alors que le HTML suffit ?
-

if [ ! -d miniatures ]; then mkdir

ah ben on mélange les tests [ ] et les tests [[ ]] et puis un simple mkdir -p aurait été bien plus simple et efficace


cracolinux a écrit :

Alors, il pue mon script

Ta clairvoyance t’honore smile


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 20/09/2010, à 10:50

cracolinux

Re : [Script] Générateur de galeries photo «GGalerie»

big_smile

Ah ben merci pour la critique, maintenant comme tu t'en doutait, je te pose les questions qui vont avec :

for image in $(ls *.jpg *.JPG)

1-Comment je fais pour faire ça proprement avec un «glob» ?  (→ boucle while )
2-Qu'est-ce qu'un «glob» (d'abord tongue ) ? (→ c'est un truc proche d'une expression régulière, dur à expliquer, en fait...)

mkdir -p

1-En quoi mkdir -p peut il m'aider ?  (→ crée un dossier sans erreur si il existe déjà )

2-Quel est l'inconvénient du xhtml par rapport au html ?

Je mélange les tests c'est vrai, je vais essayer de corriger ça et de faire plus propre.
Est-ce que tu as testé le script cependant ?
Quand penses-tu ? (du résultat, hein, je sais que le code pue grâce à ma clairvoyance..)

Merci à toi de ta réponse franche. Si tu peux m'aider à améliorer les choses, ce serait sympathique. Comme tu le dis, j'ai beaucoup à apprendre, c'est ce que je fais.
wink

EDIT : auto-réponse après 1 an 1/2

Dernière modification par cracolinux (Le 12/03/2012, à 00:32)


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#6 Le 11/03/2012, à 23:39

cracolinux

Re : [Script] Générateur de galeries photo «GGalerie»

Salut,

Je déterre mon propre post. J'ai un peu progressé depuis le temps alors j'essaye de refaire mes vieux scripts un peu plus proprement :

Voilà pour celui-ci :

#!/bin/bash
#=======================================================================
#     Fichier:        ggalerie
#
#    Utilisation:    ggalerie [répertoire de travail]
#
#    Description:    Ce script crée des miniatures à partir de fichiers
#                    jpeg et propose la visualisation de la galerie de
#                    photos correspondantes sous forme d'un fichier html.
#
#                     Le script propose également la suppression des 
#                    galeries qu'il génere (nettoyage)
#
#     Auteur:            cracolinux
#=======================================================================


# modifier cette valeur pour faire varier la qualité des miniatures
# obtenues (max=100)
qualiteminiatures=50

#===Fonction============================================
#    Nom:            creation
#    Description:    crée la galerie photo à partir de la
#                    variable : ${chemin}
#=======================================================
creation (){
    
    #--------------------------------------------------------------------
    #    création de /tmp/fichierjpg        :     liste des jpeg
    #    création de /tmp/fichierfinal     :     liste des sous répertoires
    #                                        de $chemin contenant des jpeg
    #--------------------------------------------------------------------
    find "$chemin" -type f -iname "*.jpg" | sort > /tmp/fichierjpg

    while read line
    do
        dirname "$line" >> /tmp/fichierrepertoire
    done < /tmp/fichierjpg

    sort /tmp/fichierrepertoire | uniq > /tmp/fichierfinal
    rm /tmp/fichierrepertoire


    #--------------------------------------------------------------------
    #    création des dossiers miniatures
    #    creation des en-têtes de fichier «galerie.html»
    #--------------------------------------------------------------------
    while read line
    do
        mkdir -p "${line}/mini-atures"
        echo '    <head>
                    <title>'"${line##*/}"'</title>
                    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                    <style type="text/css">
                        a img { border:0; }
                    </style>
                </head>' > "${line}"/galerie.html
    done < /tmp/fichierfinal

    #--------------------------------------------------------------------
    #     creation des miniatures avec convert, remplissage des fichiers 
    #     «galerie.html» avec les liens correspondants
    #--------------------------------------------------------------------
    while read line
    do
        convert "$line" -thumbnail '200x200>' -quality ${qualiteminiatures} "${line%/*}/mini-atures/${line##*/}"
        echo '<a href="'${line}'"><img src="mini-atures/'${line##*/}'" alt="" /></a> ' >> "${line%/*}"/galerie.html
    done < /tmp/fichierjpg

    #--------------------------------------------------------------------
    # création du fichier final « $chemin/supergalerie.html »
    #        en-tête
    #--------------------------------------------------------------------
    echo '    <head>
                <title>Ma galerie</title>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <style type="text/css">
                    a img { border:0; }
                </style>
            </head>' > "$chemin"/supergalerie.html

    #--------------------------------------------------------------------
    #        une image au hasard pointant vers chaque fichier «galerie.html»
    #--------------------------------------------------------------------
    while read line
    do
        choix=$(ls "${line}/mini-atures" | sort -R | head -n 1)
        echo '<a href="'"${line}"/galerie.html'">'"${line##*/}"'<img src="'"${line}/mini-atures/${choix}"'" alt="" /></a>' >> "$chemin"/supergalerie.html
    done < /tmp/fichierfinal

    rm /tmp/fichierfinal /tmp/fichierjpg    # nettoyage

    echo " →→ file://"$chemin"/supergalerie.html"    # lien final

    exit 0
}


#===Fonction====================================================
#    Nom:            suppression
#    Description:    supprime les fichiers généré par la fonction
#                    creation et présents dans ${chemin}
#===============================================================
suppression () {

    # Affiche la proposition et attend confirmation
        
    clear
        find "$chemin" -type d -iname "mini-atures"
        find "$chemin" -type f -iname "galerie.html"
        find "$chemin" -type f -iname "supergalerie.html"
    echo
    read -p "vont etre supprimés, continuer ? (y / n )" reponse

    # Nettoyage

    if [[ $reponse == "y" || $reponse == "Y" ]] ; then
        find "$chemin" -type d -iname "mini-atures" -exec rm -r {} \; 2> /dev/null
        find "$chemin" -type f -iname "galerie.html" -delete 2> /dev/null
        find "$chemin" -type f -iname "supergalerie.html" -delete 2> /dev/null
        echo "Galerie supprimée"
        exit 0
    else
        exit 1
    fi
}

#==MAIN====

# Choix du répertoire de travail
if [[ $# = 1 ]] ; then
    chemin=$1
else
    read -p "Répertoire de travail : " chemin
fi

# Choix
echo "1 → Créer une galerie"
echo "2 → Supprimer une galerie"
read -p " : " choix

# Lancement de la fonction correspondant au choix
[[ $choix == "1" ]] && creation
[[ $choix == "2" ]] && suppression

exit 0

Vos commentaires sont les bienvenues, vos améliorations également !
Merci

EDIT : Réparation d'une erreur avec les fichiers contenant des espaces dans le nom ....

Dernière modification par cracolinux (Le 24/03/2012, à 00:09)


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#7 Le 12/03/2012, à 00:38

sputnick

Re : [Script] Générateur de galeries photo «GGalerie»

Ya une chose rédhibitoire. L'indentation ! hmm
C'était déjà le cas dans le post #4 du 19/09/2010 à 22:47

Si tu partage tes travaux et qu'en plus tu demande de l'aide, aide toi et les autres pour présenter qq chose de lisible, l'indentation est fondamentale pour pouvoir comprendre rapidement le code. Sans cet effort, moi et d'autres n'auront pas envie d'aller plus loin. Je te dit ça parce que on est tous passé par là, et que cet aspect est fondamental pour communiquer efficacement et permettre la maintenance zen.

Un bon article sur les différents styles d’indentation sur wikipedia http://fr.wikipedia.org/wiki/Style_d%27indentation

( Les fonctions, si tu les ouvres, le code à l'interieur de la fonction doit être indenté. )

Je t'invite à éditer ton post wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 12/03/2012, à 01:25

cracolinux

Re : [Script] Générateur de galeries photo «GGalerie»

Merci de ta remarque, tu as bien raison, je dois le reconnaître !

Je viens de faire la modification,  j'espère que c'est plus lisible.


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#9 Le 12/03/2012, à 01:32

sputnick

Re : [Script] Générateur de galeries photo «GGalerie»

cracolinux a écrit :

Merci de ta remarque, tu as bien raison, je dois le reconnaître !

Je viens de faire la modification,  j'espère que c'est plus lisible.

Ca commence mal :

function creation
{
    
find "$chemin" -type f -iname "*.jpg" > /tmp/fichierjpg
(...)

Toujours pas d'indentation malgré mes explications précises.
Et puis mettre le mot clef function n'est pas une erreur mais ça appartient au passé.
On utilise en général plutot

creation() {
    # code ici
}

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#10 Le 12/03/2012, à 01:44

cracolinux

Re : [Script] Générateur de galeries photo «GGalerie»

ok, je modifie


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#11 Le 24/03/2012, à 00:08

cracolinux

Re : [Script] Générateur de galeries photo «GGalerie»

sputnick : je commence enfin le python...l'indentation... big_smile


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#12 Le 24/03/2012, à 00:43

sputnick

Re : [Script] Générateur de galeries photo «GGalerie»

Ah ben là t'a plus le choix, t'es direct obligé de prendre le bon plis wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne