Compressione automatica file jpeg

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
#!/bin/sh# directory to scanDIR="/your/directory"# jpeg quality level (1..100)JPEGQUALITY=80# commands to useCMDIDENTIFY=$( which identify )CMDCONVERT=$( which convert )if [ ! -e "$DIR" ]; then        echo ""        echo "Directory not found"        echo ""        exit 1fiif [ "$CMDIDENTIFY" = "" ]; then        echo ""        echo "Command 'identify' not found"        echo ""        exit 2fiif [ "$CMDCONVERT" = "" ]; then        echo ""        echo "Command 'convert' not found"        echo ""        exit 3ficd "$DIR"oIFS=$IFSIFS=$'\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"        fidoneIFS=$oIFScd -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>