Quante volte vi siete trovati a dover comprimere tutti i file jpeg presenti in una directory ? Quante volte il tool PageSpeed Insights di Google vi ha detto che dovevate ridurre il peso delle immagini presenti nel vostro sito ?
Una soluzione a questi noiosi problemi può essere trovata sfruttando uno script che faccia la ricerca di tutti i file .jpg presenti in una directory (e nelle sue sottodirectory) e si occupi di portarli alla qualità da voi desiderata.
Per poter utilizzare lo script di conversione automatica dei file jpg:
- accertatevi che sul vostro sistema sia presente ImageMagick
- create un nuovo file (esempio: /usr/local/bin/jpeg-compressor.sh)
- dategli i permessi di esecuzione
- al suo interno inserite quanto segue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#!/bin/sh # directory to scan DIR="/your/directory" # jpeg quality level (1..100) JPEGQUALITY=80 # commands to use CMDIDENTIFY=$( which identify ) CMDCONVERT=$( which convert ) if [ ! -e "$DIR" ]; then echo "" echo "Directory not found" echo "" exit 1 fi if [ "$CMDIDENTIFY" = "" ]; then echo "" echo "Command 'identify' not found" echo "" exit 2 fi if [ "$CMDCONVERT" = "" ]; then echo "" echo "Command 'convert' not found" echo "" exit 3 fi cd "$DIR" oIFS=$IFS IFS=$'\n' FILES=$( find . -iname "*.jpg" -type f ) for FILE in $FILES; do Q=$($CMDIDENTIFY -verbose "$FILE" | grep -i quality | awk '{print $2}') if [[ "$Q" != "" && $Q -gt $JPEGQUALITY ]]; then cp -p -f "$FILE" "${FILE}.bak-$(date +%s)" $CMDCONVERT "$FILE" -quality $JPEGQUALITY "${FILE}.new" && \ chown --reference="${FILE}" "${FILE}.new" && \ chmod --reference="${FILE}" "${FILE}.new" && \ cp -p -f "${FILE}.new" "${FILE}" [ -e "${FILE}.new" ] && rm -f "${FILE}.new" fi done IFS=$oIFS cd - exit 0 |
Attenzione:
- prima di usare lo script modificate il valore della variabile DIR, sostituendo /your/directory con la vostra vera directory da analizzare
- se avete bisogno di una qualità dell’immagine diversa dal valore 80 che ho inserito nel codice cambiate il valore della variabile JPEGQUALITY
- per ogni immagini che lo script andrà a rielaborare verrà creato un file di backup, questo avrà lo stesso nome del file originale ma terminerà con .bak-<timestamp>