GNU/Linux >> Linux Esercitazione >  >> Linux

Automatizza l'elaborazione delle immagini con questo script Bash

Gli scrittori non lavorano solo con le parole, ma spesso devono lavorare con le immagini. La scrittura tecnica implica la presentazione di molti screenshot per trasmettere la tecnologia e i processi. Diverse piattaforme di pubblicazione possono avere diversi requisiti per le immagini, come il formato dell'immagine o la dimensione del file.

In qualità di consulente IT e ingegnere di sistema, ho scritto molta documentazione tecnica come deliverable per i clienti, generalmente con Microsoft Word (.doc) come formato richiesto. Qualsiasi documento può crescere rapidamente man mano che il contenuto viene aggiunto. All'inizio, gli screenshot erano spesso bitmap (.bmp), che possono avere dimensioni di file molto grandi. Un documento che descrive l'installazione di un sistema operativo su un server potrebbe finire per essere un file molto grande.

Ridimensionare le immagini senza renderle illeggibili è stato un esercizio laborioso. Le bitmap possono essere convertite in file jpeg e successivamente in file png. La modifica ha continuato a essere una sfida anche in seguito, quando ho cambiato la mia suite per ufficio in LibreOffice. Fortunatamente, la maggior parte degli strumenti per gli screenshot oggi salva in formati più piccoli, come png.

Opensource.com pone determinati limiti alle immagini utilizzate nei suoi articoli. Ho sviluppato un metodo rapido in tre fasi per preparare le immagini per i miei articoli. Il primo passo è essere intelligenti riguardo alla messa in scena, come ridimensionare una finestra o cambiare un carattere. Due passaggi aggiuntivi sono diventati molto ripetitivi. Questi servono a garantire che l'immagine non superi il limite di larghezza di 600 pixel e ad applicare un bordo.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Lo script prepimg.sh

Ho scritto uno script Bash chiamato prepimg.sh per gestire questi compiti. Questo script utilizza due strumenti della suite ImageMagick.

Ridimensiona l'immagine

L'utilità screenshot salva l'immagine in Pictures directory con un nome generico, qualcosa come Screenshot-20210923222312.png . Il mio prepimg.sh script controlla la larghezza in pixel dei file in questa directory e ridimensiona quelli che superano il limite. Questo passaggio utilizza l'identifica programma dalla suite ImageMagick per determinare la larghezza (%w).

$ identify -format %w Screenshot-20210903202655.png
1217

Il valore della larghezza è assegnato alla variabile W da utilizzare come comparatore fino al limite di 600. Il limite stesso è configurabile tramite la variabile $MAXWIDTH . Se la larghezza è determinata a superare MAXWIDTH, un altro programma ImageMagick denominato convert viene chiamato per ridurre la larghezza dell'immagine. Ecco la funzione di elaborazione delle immagini dal mio script:

     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     
     ...    

L'immagine viene ridotta di dimensioni secondo necessità e salvata in una directory diversa definita da $READY variabile. In questo caso, l'immagine viene effettivamente ridimensionata leggermente più piccola, 598 pixel, per lasciare spazio all'aggiunta di un bordo, che mostrerò di seguito.

Aggiungi un bordo all'immagine

A volte può sembrare che un'immagine si confonda con lo sfondo della pagina web. Questo perché il colore di primo piano dell'immagine fino al bordo è lo stesso colore dello sfondo del sito. Ecco un esempio:

Come puoi vedere con l'immagine sopra, è impossibile dire dove si trovi il bordo dell'immagine. Questo problema non è limitato al colore bianco. Dipende da ogni singolo sito e dai colori del tema che utilizza. Quindi, se lo sfondo è rosso e anche il bordo dell'immagine è rosso, si verifica lo stesso problema. Il mio script risolve questo problema utilizzando convert attrezzo. Il -bordo l'opzione aggiunge un bordo a ciascun file di immagine con una dimensione di 1 pixel. Questa opzione da sola sarebbe sufficiente, ma voglio anche impostare il colore usando -bordercolor opzione. Ecco un esempio:

convert -bordercolor black -border 1 Screenshot-20210903202655.png

Sotto c'è la stessa immagine con un bordo. Non ti sembra più carino?

La tua immagine è pronta

Uso un for loop per scorrere la directory dello screenshot. Chiama la funzione process_img per ogni file. La funzione gestisce sia la larghezza che il bordo. Il codice completo esegue alcuni controlli di integrità, ad esempio per garantire che il file sia effettivamente un'immagine.

process_img() {
     # verify that file is an image file, and then get dimensions
     if file "${SCREENSHOTS}"/"${1}" | grep -qE 'image|bitmap'; then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is an image"
         W=$(identify -format %w "${SCREENSHOTS}"/"${1}")
     else
         echo "File ${SCREENSHOTS}/${1} is not an image."
         W=0
     fi
 
     # resize and border
     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     else
         convert -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     fi
 }

Il passaggio finale dello script consiste nel salvare i file elaborati in una sottodirectory denominata Ready , che è determinato dalla variabile denominata $READY . Ciò conserva i file originali per un ulteriore utilizzo.

Utilizzo

Prepimg.sh include la funzione di aiuto prevista che descrive i suoi argomenti e il loro utilizzo:

$ prepimg.sh -h
prepimg.sh Version 0.7 - written by Alan Formy-Duval
prepimg.sh [OPTIONS]
--verbose, -v Be verbose
--directory, -d Screenshot directory (default: /home/alan/Pictures/Screenshots)
--ready, -r Ready directory (default: /home/alan/Pictures/Screenshots/Ready)
--border, -b Border color (default: black)

Codice e conclusione

Il codice presentato nell'articolo è incompleto e va considerato pseudocodice. Puoi visualizzare lo script completo nel mio repository Git.

La suite ImageMagick è un potente set di strumenti per manipolare le immagini. Puoi fare molte altre cose oltre alle funzioni incorporate nel mio piccolo script. Anche il corrispondente Jim Hall ha scritto di recente di usarlo per ridimensionare un'immagine.

Sia che tu preferisca lo scripting Bash o la codifica in un altro linguaggio come C o Python, l'automazione è di grande aiuto. Di volta in volta, ho visto come un po' di codice può ridurre così tanti mal di testa e permetterci di utilizzare meglio il nostro tempo.


Linux
  1. Quale interprete di shell esegue uno script senza Shebang?

  2. Lo script Bash con `set -e` non si ferma al comando `… &&…`?

  3. Impossibile interrompere uno script Bash con Ctrl+c?

  4. basename con spazi in uno script bash?

  5. Autorizzazione negata con bash.sh per eseguire cron

Usa questo utile script Bash quando osservi le stelle

Come scrivere uno script Bash con esempi

Shell Scripting Parte I:Introduzione agli script bash

Bash Beginner Series #10:Automazione con Bash

Bash Scripting Introduzione Tutorial con 5 esempi pratici

Script Bash per Loop spiegato con esempi