Le miniguide di UbaWeb

Incorniciare immagini automaticamente

Premessa Torna su

28 febbraio 2015 - Linux 3.13.0-37-generic - Ubuntu 14.04.2 LTS x86_64 - Bash: 4.3.11(1)
Sul forum ubuntu.it è capitata una richiesta di aiuto per il montaggio di immagini mediante script. Questo montaggio doveva servire per incorniciare, con cornici diverse, l'immagine passata come argomento allo script. Ogni immagine doveva essere ridimensionata e salvata in versioni diverse per ogni cornice; poi, visto che i formati immagine potevano essere diversi, si dovevano adeguare le cornici alle proporzioni dell'immagine.
Ho cominciato a buttare giù degli script adeguandoli a quanto richiesto, fino ad arrivare alla versione completamente automatica che presento in questa pagina.

Requisiti Torna su

- Lo script richiede che sia installato "Imagemagick", inoltre fa uso di Awk (in particolare, io ho: GNU Awk 4.0.1) .

- Lo script è fatto per funzionare su cornici che hanno al centro un area trasparente rettangolare, proporzionale alle dimensioni esterne della cornice.

- Non devono esserci altre aree trasparenti oltre a quella centrale, altrimenti il calcolo delle dimensioni dell'area trasparente risulterebbe errato.

- Il nome dei file salvati viene creato prendendo il nome dell'immagine da incorniciare e parte del nome della cornice, (per l'esttezza, le prime due parole separate da "-" o da "_" del nome del file della cornice). Per questo motivo i nomi delle cornici dovrebbero avere un formato di questo tipo: nome_cornice_altroTestoNonConsiderato.png.

- Sarebbe bene utilizzare cornici a sviluppo verticale per immagini a sviluppo verticale e cornici orizzontali per immagini orizzontali; altrimenti, in caso di ridimensionamento spinto, si avrebbero larghezze dei listelli verticali molto diverse da quelle dei listelli orizzontali.

- La directory di salvataggio deve esistere ed essere scrivibile dall'utente che esegue lo script.

Uso Torna su

Configurazione:
Ad inizio script ci sono delle variabili che è possibile modificare:

dir_cornici='cornici' dir_out=$(pwd) ext='.jpg' #estensione del file in output

dir_cornici: La directory contenente i file ".png" da usare come cornici. Questo valore può essere sovrascritto se viene passato il secondo argomento, all'esecuzione dello script.

dir_out: La directory in cui salvare le immagini incorniciate finite. É impostata a $(pwd) per salvare i file finali nella stessa directory in cui si trova l'immagine da elaborare.
ext Indica l'estensione con cui saranno salvati i file finali.

Utilizzo:
Lo script si esegue con questa sintassi: ./incornicia.sh path_file.jpg [path_cornici]

Il primo argomento path_file.jpg è obbligatorio, rappresenta il file da incorniciare.

Il secondo argomento"path_cornici" è opzionale, rappresenta la directory contente le cornici. Se non è presente verrà utilizzata la directory indicata nella variabile "$dir_cornici".

Per esempio:
./incornicia.sh gatto.jpg cornici
Incornicia, l'immagine "gatto.jpg", con tutte le cornici presenti nella directory (e sottodirectory) "cornici";
tutte le immagini risultanti verranno salvate nella stessa directory contenente "gatto.jpg".

Situazione iniziale:

. ├── cornici │   ├── piatta_ciliegio_1198x1598.png │   ├── piatta_ciliegio_640x498.png │   ├── piatta_mogano_640x498.png │   ├── piatta_noce_1291x1645.png │   ├── piatta_noce_640x498.png │   ├── star_arancio_482x640.png │   ├── star_blu_482x640.png │   ├── star_celeste_482x640.png │   ├── star_fucsia_482x640.png │   ├── star_nero_482x640.png │   ├── star_rosso_482x640.png │   └── star_verde_482x640.png ├── gatto.jpg └── incornicia.sh
eseguo lo script:
8-) ./incornicia.sh gatto.jpg cornici Rielaborata: star_rosso_482x640.png Rielaborata: star_blu_482x640.png Rielaborata: piatta_mogano_640x498.png Rielaborata: star_nero_482x640.png Rielaborata: piatta_ciliegio_640x498.png Rielaborata: star_verde_482x640.png Rielaborata: star_fucsia_482x640.png Rielaborata: piatta_ciliegio_1198x1598.png Rielaborata: piatta_noce_1291x1645.png Rielaborata: piatta_noce_640x498.png Rielaborata: star_celeste_482x640.png Rielaborata: star_arancio_482x640.png Finito! 8-)
situazione finale
. ├── cornici │   ├── piatta_ciliegio_1198x1598.png │   ├── piatta_ciliegio_640x498.png │   ├── piatta_mogano_640x498.png │   ├── piatta_noce_1291x1645.png │   ├── piatta_noce_640x498.png │   ├── star_arancio_482x640.png │   ├── star_blu_482x640.png │   ├── star_celeste_482x640.png │   ├── star_fucsia_482x640.png │   ├── star_nero_482x640.png │   ├── star_rosso_482x640.png │   └── star_verde_482x640.png ├── gatto.jpg ├── gatto-piatta_ciliegio.jpg ├── gatto-piatta_mogano.jpg ├── gatto-piatta_noce.jpg ├── gatto-star_arancio.jpg ├── gatto-star_blu.jpg ├── gatto-star_celeste.jpg ├── gatto-star_fucsia.jpg ├── gatto-star_nero.jpg ├── gatto-star_rosso.jpg ├── gatto-star_verde.jpg └── incornicia.sh

Tips:

Non vorrei la ricerca ricorsiva, delle sottodirectory nella directory contenente le cornici! Come fare?
Basta sostituire la riga:
find "$dir_cornici" -type f -iname '*.png' -print0 | while read -d $'\0' cornice
con:
find "$dir_cornici" -maxdepth 1 -type f -iname '*.png' -print0 | while read -d $'\0' cornice

Come eseguire lo script automaticamente su tutte le immagini di una data directory?
Basta far eseguire lo script all'interno di un ciclo.
Per esempio, voglio far eseguire lo script per tutte le immagini .jpg all'interno della directory "img", utilizzando le cornici presenti nella directory "cornici":
for f in img/*.jpg; do ./incornicia.sh "$f" "cornici";done


DownloadTorna su

Lo script è utilizzabile, modificabile e ridistribuibile e liberamente, mantenendo però la stessa licenza (Creative Commons BY SA 4.0)

Scaricare il file incornicia.sh.tar.gz e scompattarlo; se non lo fosse già rendere eseguibile lo script.
Pronti! 8-)

Sito realizzato da: UbaWeb di Giovanni Ubaldi

Licenza Creative Commons Tutto il contenuto di questo sito se non diversamente dichiarato è di Giovanni Ubaldi ed è distribuito con Licenza:

Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.