Pillole di Bash e Imagemagick: aggiunta watermark

Quante volte ci è capitato di dover manipolare una serie di immagini per cambiarne inserire un watermark ? Quando sono poche possiamo utilizzare Gimp o qualche altro editor grafico ma quando il numero cresce, diventa un lavoro ripetitivo e parecchio noioso. Per chi non lo sapesse, il watermark è quel marcho o scritta, simile ad una filigrana che si aggiunge nelle immagini per apporvi una sorta di firma.

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:

Inserimento testo watermark

lo script proposto non ha enormi pretese, dato che mi è servito per preparare le immagini di un cliente per il proprio sito di e-commerce ma può essere uno spunto per ulteriori affinamenti e personalizzazioni; provvederà comunque creare delle copie delle immagini trovate nella directory corrente, con l’aggiunta del watermark, e le salverà in una sottodirectory di nome watermarked.

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

#!/bin/bash
#
# add watermark to images
#
echo -n "Testo Watermark [(C) Inforisorse]"
read WTEXT
if [ "$WTEXT" == "" ]; then
    WTEXT="(C) Inforisorse"
fi
#
echo -n "Altezza Watermark [300]"
read H
if [ "$H" == "" ]; then
    H=300
fi
#
echo -n "Larghezza Watermark [300]"
read W
if [ "$W" == "" ]; then
    W=300
fi
#
echo -n "Dimensione font [12]"
read F
if [ "$F" == "" ]; then
    F=12
fi
#
echo "Applicazione watermark: $WTEXT"
#
if [ ! -d watermarked ]; then
    mkdir watermarked
fi
#
for file in *.jpg *.png *.gif
do
    echo "Watermarking file $file ..."
    convert -size ${W}x${H} -pointsize $F xc:none -fill white \
        -draw "gravity NorthWest \
        fill grey70 translate 100,100 rotate 315 text 1,11 '$WTEXT' \
        fill white text 2,10 '$WTEXT'" \
        -draw "gravity SouthEast \
        fill grey70 translate 100,100 rotate 315 text 21,41 '$WTEXT' \
        fill white text 22,40 '$WTEXT'" \
        miff:- |\
        composite -tile - "$file" "watermarked/$file"
done

Come potete osservare, lo script ci chiede come prima cosa il testo del marchio da inserire quindi le dimensioni del marchio e dei caratteri  Le istruzioni read servono a richiedere a video i valori desiderati 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 eiste ancora. La directory avrà il nome watermarked

Il richiamo alle utility di ImageMagick inserisce il testo, inclinato di 315 gradi (equivalenti a 45° in senso antiorario), con un lieve effetto tridimensionale, in modo che sia visibile sia su parti bianche che parti colorate dell’immagine.

Le opzioni translate 100,100 servono a ‘spostare’ il riferimento base per la scritta che altrimenti verrebbe troncata per rimanere enro l’area definita per il watermark. Notate che l’opzione vale per entrambe le opzioni fill del comando -draw, per cui non va ripetuta all’interno di esso.

I valori grey70 e white utilizzati come parametro all’opzione fill indicano quali colori utilizzare per la scritta.

I valori riportati dopo l’opzione text indicano la posizione dove deve iniziare la scritta e come potete vedere vengono utilizzati valori diversi per le due opzioni fill di ogni comando -draw, per ottenere lo scostamento dtra le due scritte che si sovrapporranno per formare l’effetto tridimensionale.

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).