Tag: bash

Ridimensionare, rinominare e aggiungere un watermark con uno script BASH (zh_rrw.sh)

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.

#!/bin/bash
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

Permalink link a questo articolo: http://www.andrea.rustichelli.name/ridimensionare-rinominare-e-aggiungere-un-watermark-con-uno-script-bash-zh_rrw-sh/

Ottenere info sul sistema linux tramite un programma Bash

Mi capita a volte di avere la necessità di recuperare informazioni sul sistema operativo linux e su altre informazioni legate al sistema e alla rete. Visto che non mi ricordo sempre tutti i comandi (considerato che lo uso solo nel tempo libero) ho scritto un programma bash da lanciare. Un volta eseguito (se non vengono forniti parametri in input) il programma visualizza le tipologie di informazioni e poi, una volta fatta la scelta, vengono mostrate le informazioni richieste. E’ anche possibile eseguire il programma passando direttamente il numero corrispondente all’opzione desiderata. Fin che c’ero ho cercato di utilizzare i principali costrutti come l’if e il case.

#!/bin/bash

if [ $# -eq 0 ]; 
then 
#se non è stato passato il parametro viene visualizzato il menù con
#le opzioni
echo "################################################"
echo "# Visualizza le info del sistema e dell'utente #"
echo "# 1 - Informazioni dal 'printenv'              #"
echo "# 2 - Informazioni generiche sul sistema       #"
echo "# 3 - Informazioni di rete                     #"
echo "# 4 - Informazioni sulla release               #"
echo "# 5 - Informazioni sulla CPU                   #"
echo '# 6 - Varie                                    #'
echo "################################################"
read -p "Scegli l'opzione:" OPZ
else 
#altrimenti il parametro passato viene messo nella varibile di scelta
OPZ=$1
fi

case $OPZ in
1) 
clear 
echo "---===] Informazioni dal 'printenv' [===---"
printenv|grep SHELL
printenv|grep USER
printenv|grep DESKTOP_SESSION
printenv|grep LANG
printenv|grep CINNAMON_SESSION
printenv|grep HOME
;;
2) 
clear
echo "---===] Informazioni generiche sul sistema [===---"
echo "Nome host: "`uname -n`
echo "Sistema basato su: "`uname -s`
echo "Sistema operativo: "`uname -o`
echo "Kernel release: "`uname -r`
echo "Kernel version: "`uname -v`
;;
3)
clear
echo "---===] Informazioni di rete [===---"
echo "Nome host: "`hostname`
echo "Indirizzo IP: "`hostname -i`
echo "Indirizzo IP internet: "`hostname -I`
;;
4)
clear
echo "---===] Informazioni sulla release [===---"
echo "Distribuzione: "`lsb_release -is`
echo "Descrizione: "`lsb_release -ds`
echo "Numero di release: "`lsb_release -rs`
echo "Nome in codice della release: "`lsb_release -cs`
;;
5)
clear
echo "---===] Informazioni sulla CPU [===---"
cat /proc/cpuinfo|grep vendor_id |uniq
cat /proc/cpuinfo|grep 'model name' |uniq
cat /proc/cpuinfo|grep 'cache size' |uniq
lscpu|grep Architecture
lscpu|grep 'CPU op-mode'
lscpu|grep 'CPU(s)'|head -1
;;
6)
clear
echo "---===] Varie [===---"
ls -l /usr/share/xsessions/
;;
esac

Permalink link a questo articolo: http://www.andrea.rustichelli.name/ottenere-info-sul-sistema-linux-tramite-un-programma-bash/