Pillole di Bash e Imagemagick: ridimensionamento immagini

Quante volte ci è capitato di dover manipolare una serie di immagini per cambiarne il le dimensioni ? Quando sono poche possiamo utilizzare Gimp o qualche altro editor grafico ma quando il numero cresce, diventa un lavoro ripetitivo e parecchio noioso.

Allora ci vengono incontro bash e ImageMagick, rivelandosi strumenti comodi ed efficaci che ci permettono di far eseguire il lavoro in automatico mentre noi possiamo dedicarci ad altre attività.

Prerequisiti

Ovviamente sto parlando di ambiente GNU/Linux ma potreste riportare queste tecniche anche in ambiente Windows e Mac, dato che per Windows sono disponibili sia emulatori bash che ImageMagick e in ambiente Mac OS/X sono disponibili sia bash che ImageMagick. Per questi ambienti potrebbero essere necessarie alcune modifiche che non prenderò in considerazione in quanto esulano dallo scopo di questa documentazione.

Potrebbe essere necessario installare ImageMagick, in tale caso fate riferimento alla distribuzione che utilizzate per installarlo, solitamente è disponibile per tutte; per le distribuzioni derivate da debian (come utilizzo io) si può fare dalla shell con:

Ridimensionamento delle immagini

Lo script che prenderemo in considerazione provvede a ridimensionare le immagini trovate nella cartella di esecuzione, creandone delle copie in una sottocartella.

Utilizzando il vostro editor di testo preferito, create il file resize_images.sh e sciveteci dentro quanto segue:

#!/bin/bash
#
# resize images
#
echo -n "larghezza massima (1024): "
read MAX_W
#
echo -n "altezza massima: (768)"
read MAX_H
#
if [ "$MAX_W" == "" ]; then
    MAX_W=1024
fi
#
if [ "$MAX_H" == "" ]; then
    MAX_H=768
fi
#
echo "Creazione thumbnails: ${MAX_W}x${MAX_H}"
#
if [ ! -d ${MAX_W}x${MAX_H} ]; then
    mkdir ${MAX_W}x${MAX_H}
fi
#
for file in *.jpg *.png *.gif
do
    echo "Resizing file $file ..."
    convert -resize ${MAX_W}x${MAX_H} "$file" "${MAX_W}x${MAX_H}/$file"
done

Come potete osservare, lo script ci chiede come prima cosa le nuove dimensioni che vogliamo impostare per le immagini. Le istruzioni read servono a richiedere a video i valori di larghezza ed altezza; ai quali, se non li digitiamo, i costrutti if che seguono provvederanno ad assegnare i valori predefiniti.

Per nostra comodità, viene eseguito un controllo sull’esistenza della directory di destinazione che verrà creata se non esiste ancora. La directory avrà come nome le dimensioni richieste, nel caso di quelle predefinite sarà quindi 1024×768.

Finalmente viene la parte di elaborazione: per tutti i file con estensione jpg,png o gif verrà richiamata l’utility convert (facente parte del pacchetto ImageMagick) con l’opzione di ridimensionamento dell’immagine.

Impostazione permessi

Per poter eseguire il nostro script, abbiamo ancora bisogno di impostarne i permessi per renderlo eseguibile. Potete effettuare l’operazione con il vostro file manager preferito, selezionando il file, ed andando sulle proprietà oppure da linea comandi con un semplice:

Note

Lo script non è perfetto, in particolare segnalerà un errore per le estensioni di cui non trova file, pur funzionando correttamente ed elaborando tutti i file presenti (per i tipi specificati).