83 lines
2.8 KiB
Bash
Executable file
83 lines
2.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
if [ "$#" -ne 2 ]
|
|
then
|
|
maxwidth=800
|
|
else
|
|
maxwidth=$2
|
|
fi
|
|
|
|
check_replace(){
|
|
# Si le thumbnail généré est plus gros que l'original (ça arrive régulièrement surtout avec les png) on garde l'original et on le copie comme si c'était le thumbnail.
|
|
size_orig=$(stat -c %s $1)
|
|
size_thumb=$(stat -c %s $2)
|
|
if [ "$size_orig" -lt "$size_thumb" ]; then
|
|
rm "$2"
|
|
cp "$1" "$2"
|
|
fi
|
|
}
|
|
|
|
thumbnail(){
|
|
echo -en "Processing image \e[0;34m$2\e[0m :"
|
|
extension="$(echo $2 | awk -F\. '{print $NF}')"
|
|
thumbname="$(dirname $2)/$(basename -s .$extension $2).thumb.$extension"
|
|
thumbwebpname="$(dirname $2)/$(basename -s .$extension $2).thumb.webp"
|
|
thumbavifname="$(dirname $2)/$(basename -s .$extension $2).thumb.avif"
|
|
|
|
maxwidth=$1
|
|
jpegq=75
|
|
webpq=55
|
|
cavifq=35
|
|
|
|
# Si une image est un thumbnail on la considère comme déjà bien traitée.
|
|
if [[ $2 == *".thumb."* ]]; then
|
|
echo -e " \e[0;31mest un thumb !\e[0m"
|
|
return 0
|
|
fi
|
|
|
|
# Si une image a déjà un thumbnail, on la considère comme déjà traitée et donc on y retouche pas.
|
|
if [ -f "$(dirname $2)/$(basename -s .$extension $2).thumb.$extension" ]; then
|
|
echo -e " \e[0;31ma déjà un thumb !\e[0m"
|
|
return 0
|
|
fi
|
|
|
|
case "$extension" in
|
|
jpg | jpeg | JPG | JPEG )
|
|
/usr/bin/convert -resize $maxwidth\> -quality 100 "$2" "$thumbname.LOSSLESS"
|
|
/usr/bin/convert -quality $jpegq "$thumbname.LOSSLESS" "$thumbname"
|
|
/usr/bin/convert -quality $webpq "$thumbname.LOSSLESS" "$thumbwebpname"
|
|
/usr/bin/cavif --quiet --quality $cavifq "$thumbname.LOSSLESS" --output "$thumbavifname"
|
|
rm "$thumbname.LOSSLESS"
|
|
jpegoptim --quiet --strip-all "$2"
|
|
check_replace "$2" "$thumbname"
|
|
;;
|
|
png | PNG)
|
|
# Ce con de pngcrush a tendance à faire n'importe quoi si on lui dit de réécrire par dessus les images, du coup on passe par un fichier temporaire qu'on renomme par la suite.
|
|
pngcrush -warn "$2" "$2.tmp"
|
|
mv -f "$2.tmp" "$2"
|
|
usr/bin/convert -resize $maxwidth\> "$2" "$thumbname"
|
|
/usr/bin/convert -resize $maxwidth\> -quality $webpq "$2" "$thumbwebpname"
|
|
pngcrush -warn "$thumbname" "$thumbname.tmp"
|
|
mv -f "$thumbname.tmp" "$thumbname"
|
|
check_replace "$2" "$thumbname"
|
|
|
|
/usr/bin/convert -resize $maxwidth\> -quality 100 "$2" "$thumbname.LOSSLESS"
|
|
/usr/bin/cavif --quiet --quality $cavifq "$thumbname.LOSSLESS" --output "$thumbavifname"
|
|
rm "$thumbname.LOSSLESS"
|
|
|
|
|
|
;;
|
|
esac
|
|
sizeorig=$(stat -c %s $2 | numfmt --to=iec --padding=3)
|
|
sizethumb=$(stat -c %s $thumbname | numfmt --to=iec --padding=3)
|
|
sizewebp=$(stat -c %s $thumbwebpname | numfmt --to=iec --padding=3)
|
|
sizeavif=$(stat -c %s $thumbavifname | numfmt --to=iec --padding=3)
|
|
echo -e "\e[0;32mOK\e[0;m : orig : $sizeorig > $sizethumb ; webp:$sizewebp ; avif:$sizeavif"
|
|
}
|
|
|
|
|
|
export -f thumbnail
|
|
export -f check_replace
|
|
|
|
find $1 -name '*.jpg' -or -name '*.jpeg' -or -name '*.JPG' -or -name '*.JPEG' -or -name '*.png' -or -name '*.PNG' | parallel --jobs 16 thumbnail $maxwidth
|
|
|