#1 Le 23/12/2019, à 17:54
- kalene
Amélioration du code [Résolu]
Bonsoir,
Le script est fonctionnel mais ils quelques améliorations qui peuvent être faite, j'aimerai afficher le nom des images en dessous des images j'en est aucune idée de comment faire et aussi j'aimerai masquer les erreurs du style :
./variables6.sh: line 28: : No such file or directory
./variables6.sh: line 68: : No such file or directory
convert-im6.q16: unable to open image `Images/**/*.jpeg': No such file or directory @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no images defined `miniatures/*.jpeg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: unable to open image `Images/**/*.gif': No such file or directory @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no images defined `miniatures/*.gif' @ error/convert.c/ConvertImageCommand/3258.
Elles apparaisse du fait que le scripte ne trouve pas les images dans se type de format et pour les erreurs de type "./variables6.sh: line 28: : No such file or directory" ça je ne sais pas c'est du à quoi ^^
#!/bin/bash
Check_And_Create_Html_File(){
if [ -z "$1" ]
then
sortie='galerie.html'
echo "Default Galerie"
else
sortie=$1
echo "$1"
fi
echo '' > "$sortie"
if [ ! -d miniatures ]
then mkdir miniatures
fi
}
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>' >> "$sortie"
Create_Directory(){
while true; do
read -r -p 'Enter your directory : ' directory
if [ -z "$directory" ]; then
echo "Inserer du texte"
continue
fi
if [ -d "$directory" ]; then break
else echo "Le chemin entrer n'est pas valide"
fi
done
}
Check_And_Create_Size(){
numSizeMin=200
numSizeMax=800
while [ -z "$1" ]; do
read -r -p 'Enter images size : ' sizeImage
if [ -z "$sizeImage" ]; then
echo "Insert text pls"
continue
fi
if [ "$sizeImage" -le "$numSizeMax" ] && [ "$sizeImage" -ge "$numSizeMin" ]; then break
else echo "Size no valid"
fi
done
}
Searche_And_Convert_Images(){
shopt -s globstar
for image in "$directory"/**/*.{png,PNG,jpg,jpeg,gif}; do
convert "$image" -thumbnail "$sizeImage" "miniatures/${image##*/}"
echo '<a href="'"$image"'"><img src="miniatures/'"${image##*/}"'" alt="" /> </a> '>> "$sortie"
done
}
echo'
</p>
</body>
</html>' >> "$sortie"
Main(){
Check_And_Create_Html_File "$@"
numSizeMin=200
numSizeMax=800
Check_And_Create_Size "$@"
Create_Directory
Searche_And_Convert_Images
}
Main "$@"
N’hésitez pas à me donner des conseils pour améliorer le code
Dernière modification par kalene (Le 25/12/2019, à 18:27)
Hors ligne
#2 Le 23/12/2019, à 18:29
- kamaris
Re : Amélioration du code [Résolu]
Pour les erreurs que tu as en lignes 28 et 68, c'est parce que tu n'as pas inclus dans tes fonctions les commandes echo d'écriture dans le fichier html.
Par ailleurs il y avait une espace manquante au niveau du echo en ligne 65.
Pour les erreurs au niveau des formats de fichiers, il faut que tu utilises l'option shell nullglob (shopt -s nullglob), pour que le shell n'aille pas chercher des fichiers qui n'existent pas.
Voici ce que ça donne en corrigeant juste cela :
#!/bin/bash
Check_And_Create_Html_File(){
if [ -z "$1" ]
then
sortie='galerie.html'
echo "Default Galerie"
else
sortie=$1
echo "$1"
fi
echo '' > "$sortie"
if [ ! -d miniatures ]
then mkdir miniatures
fi
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>' >> "$sortie"
}
Create_Directory(){
while true; do
read -r -p 'Enter your directory : ' directory
if [ -z "$directory" ]; then
echo "Inserer du texte"
continue
fi
if [ -d "$directory" ]; then break
else echo "Le chemin entrer n'est pas valide"
fi
done
}
Check_And_Create_Size(){
numSizeMin=200
numSizeMax=800
while [ -z "$1" ]; do
read -r -p 'Enter images size : ' sizeImage
if [ -z "$sizeImage" ]; then
echo "Insert text pls"
continue
fi
if [ "$sizeImage" -le "$numSizeMax" ] && [ "$sizeImage" -ge "$numSizeMin" ]; then break
else echo "Size no valid"
fi
done
}
Searche_And_Convert_Images(){
shopt -s globstar
shopt -s nullglob
for image in "$directory"/**/*.{png,PNG,jpg,jpeg,gif}; do
convert "$image" -thumbnail "$sizeImage" "miniatures/${image##*/}"
echo '<a href="'"$image"'"><img src="miniatures/'"${image##*/}"'" alt="" /> </a> '>> "$sortie"
done
echo '
</p>
</body>
</html>' >> "$sortie"
}
Main(){
Check_And_Create_Html_File "$@"
numSizeMin=200
numSizeMax=800
Check_And_Create_Size "$@"
Create_Directory
Searche_And_Convert_Images
}
Main "$@"
EDIT : on s'est croisés lorsque tu as modifié ton code ci-dessus, je mets donc à jour le code corrigé, mais la différence ne porte que sur des commentaires supprimés apparemment.
Dernière modification par kamaris (Le 23/12/2019, à 18:45)
Hors ligne
#3 Le 23/12/2019, à 18:56
- Watael
Re : Amélioration du code [Résolu]
c'est le bazar.
les fonctions doivent être toutes déclarées avant tout.
on n'intercale pas des echo et des déclarations.
elles ne sont pas toutes utiles (Main() entre autres).
on ne définit pas des variables globales dans des fonctions. on peut, mais on ne le fait pas.
on ne peut pas utiliser des variables déclarées dans une fonction qui n'a pas été exécutée.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 23/12/2019, à 19:26
- kalene
Re : Amélioration du code [Résolu]
Je suis nouveau dans le shell, mais j'ai juste suivi les instructions de cette video pour les fonctions https://www.youtube.com/watch?v=m5vKQ7ATBNc
Le Main c'est pour isoler les fonctions, pour les tests.
"on n'intercale pas des echo et des déclarations." Pas bien compris
"on ne définit pas des variables globales dans des fonctions. on peut, mais on ne le fait pas." On fait comment alors ?
Merci pour vos retours
Hors ligne
#5 Le 23/12/2019, à 20:20
- kamaris
Re : Amélioration du code [Résolu]
Pour afficher les images avec leur titre en dessous, j'ai l'impression que le tag <figure> du html5, avec son sous-tag <figcaption>, est assez simple et propre, mais on ne semble pas pouvoir échapper à l'ajout de quelques lignes de style css pour mettre les figures côte à côte et centrer leur titre.
Je trouve ça étonnement « compliqué » (c'est pas la mort non plus), mais bon…
Je me suis inspiré (fortement) de ça : https://stackoverflow.com/a/22420521
Voilà ce que ça donne (en homogénéisant l'indentation et avec quelques changements mineurs que je te laisse détailler) :
#!/bin/bash
Check_And_Create_Html_File(){
if [ -z "$1" ]
then
sortie='galerie.html'
echo "Default Galerie"
else
sortie=$1
echo "$1"
fi
echo -n '' > "$sortie"
mkdir -p miniatures
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; }
figure {
display: inline-block;
}
figcaption {
text-align: center;
}
</style>
</head>
<body>
<p>' >> "$sortie"
}
Create_Directory(){
while true; do
read -r -p 'Enter your directory : ' directory
if [ -z "$directory" ]; then
echo "Inserer du texte"
continue
fi
if [ -d "$directory" ]; then break
else echo "Le chemin entrer n'est pas valide"
fi
done
}
Check_And_Create_Size(){
numSizeMin=200
numSizeMax=800
while [ -z "$1" ]; do
read -r -p 'Enter images size : ' sizeImage
if [ -z "$sizeImage" ]; then
echo "Insert text pls"
continue
fi
if [ "$sizeImage" -le "$numSizeMax" ] && [ "$sizeImage" -ge "$numSizeMin" ]; then break
else echo "Size no valid"
fi
done
}
Searche_And_Convert_Images(){
shopt -s globstar nullglob
for image in "$directory"/**/*.{png,PNG,jpg,jpeg,gif}; do
image_name=${image##*/}
convert "$image" -thumbnail "$sizeImage" "miniatures/$image_name"
echo ' <figure>
<a href="'"$image"'"><img src="miniatures/'"$image_name"'" alt="" /></a>
<figcaption>'"$image_name"'</figcaption>
</figure>'
done >> "$sortie"
echo ' </p>
</body>
</html>' >> "$sortie"
}
Main(){
Check_And_Create_Html_File "$@"
Check_And_Create_Size "$@"
Create_Directory
Searche_And_Convert_Images
}
Main "$@"
EDIT : oups, j'avais pas vu que vous aviez poursuivi la discussion, désolé (j'ai pas été notifié -> en fait si, mais mon mail était HS ).
Dernière modification par kamaris (Le 23/12/2019, à 20:25)
Hors ligne
#6 Le 23/12/2019, à 20:34
- kamaris
Re : Amélioration du code [Résolu]
"on n'intercale pas des echo et des déclarations." Pas bien compris
C'est l'erreur dont je te parlais en #2, celle qui faisait que tu avais des erreurs en lignes 28 et 68 : tu essayais d'écrire dans le fichier "$sortie", alors que cette variable n'avait pas encore été renseignée.
Dernière modification par kamaris (Le 23/12/2019, à 20:37)
Hors ligne
#7 Le 23/12/2019, à 22:05
- Watael
Re : Amélioration du code [Résolu]
si le code n'est pas répété, une fonction n'est pas utile.
plutôt que :
fonc_1() {
...
}
fonc_2() {
...
}
main(){
fonc_1
fonc_2
}
main
utilise des commentaires :
# FONCTIONNALITÉ 1 qui fait ça et ceci
...
# FONCTIONNALITÉ 2 qui fait ci et ça
...
KISS!
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 23/12/2019, à 22:29
- kalene
Re : Amélioration du code [Résolu]
si le code n'est pas répété, une fonction n'est pas utile.
Oui je suis bien d'accord avec toi, de base le code n'avait pas de fonction, mais je les est rajouté après pour pouvoir isoler les différentes actions et test le code je trouvai ça pratique, après c'est peut être une mauvaise façon de faire, je sais pas. Mais merci pour ton aide !
Et encore merci Kamaris pour ton aide !
Hors ligne
#9 Le 23/12/2019, à 23:31
- kamaris
Re : Amélioration du code [Résolu]
De rien
Il y a de multiples façons de faire pour l'affichage des images avec leur nom en dessous.
Si tu as plus de questions à ce sujet, ou d'une manière plus générale sur le code html que doit produire le script, il vaudrait sans doute mieux séparer les choses en ouvrant un sujet html dans la section « Développement et programmation » du forum.
Hors ligne