Chi ha un sito sa bene che caricare le immagini è sempre un mezzo dramma.

Occorre ridimensionare le immagini perchè le attuali macchine fotografiche o i cellulari e i tablet fanno foto grandi come lenzuoli e con pesi (in MB) che non sono sempre comodi da uploadare (e da visualizzare sul sito).

Poi bisogna rinominare i file in modo da gestirli meglio… ma se i file sono molti diventa una scocciatura. Si possono usare programmi per il “rename” massivo, ma non sono sempre pratici.

Poi è carino aggiungere un watermark. E non sempre i programmi che usiamo per rinominare i file in modo massivo hanno questa funzionalità.

Per gestire le foto del mio sito usavo questa strategia:

  • rinominavo le foto a mano (con il tasto funzione F2 in ambiente Linux);
  • ho installato un plugin su WordPress in modo da ridimensionare la foto appena caricata in modo da ridimensionarla secondo una certa dimensione massima
  • poi ho installato un altro plugin su WordPress in modo da aggiungere automaticamente un watermark all’immagine. Il problema è che la dimensione del testo del watermark era fissa e non dipendeva dalle dimensioni dell’immagine caricata. Quindi a volte la scritta era microscopica, mentre altre volte enorme

Poi cercando in internet una soluzione migliore (e che magari mi facesse smacchinare un po’) ho trovato ImageMagick e tutti i suoi comandi per realizzare uno script da eseguire. Di seguito trovate il codice dello script perfettamente funzionante e con i commenti delle principali funzioni.

    echo "******************************************"
    echo "* Script per ridimensionare, rinominare  *"
    echo "* e aggiungere un watermark alle foto    *"
    echo "* in modo massivo.                       *"
    echo "*   Andrea Rustichelli - Dicembre 2019   *"
    echo "*      www.andrea.rustichelli.name       *"
    echo "******************************************"

    echo "Inserisci il nome per i nuovi files..."
    read file_name
    echo "Ok, procedo a rinominare i file in: " $file_name

    count=0
    #scorre tutti i file .jpg presenti nella cartella dello script
    for each in *.jpg
     do
      echo "Inizio elaborazione file "$each"..."
      #incrementa il contatore da utilizzare come suffisso del nome del file
      count=`expr $count + 1`
      echo $count
      #il contatore viene convertito su 3 cifre in modo da poter ordinare fino a 999 immagini con lo stesso nome
      count3d=$(printf "%03d" $count)
      #viene composto il nome del file di output
      file_out="$file_name"_"$count3d".jpg

      #questo comando di ImageMagick converte il file in modo che la dimensione massima del lato più lungo
      #sia impostato a 1024 pixel... il lato più corto viene ridimensinato di conseguenza per mantenere le
      #proporzioni dell'immagine
      convert -resize 1024x1024\> "$each" "$file_out"
      #questo comando di ImageMagick serve per creare il watermark con la scritta "andrea.rustichelli.name"
      #nalla parte bassa dell'immagine ridimensionata
      convert "$file_out" -pointsize 35 -fill white -undercolor '#00000080' -gravity South -annotate +0+5 'andrea.rustichelli.name' "$file_out"

      #il file originale viene spostato nella sottocartella chiamata "original_file", mentre il 
      #file di output viene spostato nella nella sottocartella chiamata "thumb"
      mv "$each" ./original_file
      mv "$file_out" ./thumb
     done
    echo "Elaborazione terminata!"
    exit