GNU/Linux >> Znalost Linux >  >> Linux

Automatizujte zpracování obrázků pomocí tohoto skriptu Bash

Spisovatelé nepracují jen se slovy, často musí pracovat s obrázky. Technické psaní zahrnuje předložení mnoha snímků obrazovky, které zprostředkují technologii a procesy. Různé platformy pro publikování mohou mít různé požadavky na obrázky, jako je formát obrázku nebo velikost souboru.

Jako IT konzultant a systémový inženýr jsem napsal mnoho technické dokumentace jako výstup pro klienty, obvykle s Microsoft Word (.doc) jako požadovaným formátem. Jakýkoli dokument může rychle růst s přidáváním obsahu. V prvních dnech byly snímky obrazovky často bitmapy (.bmp), které mohou mít velmi velkou velikost souboru. Dokument popisující instalaci operačního systému na server by mohl skončit jako velmi velký soubor.

Zmenšení obrázků bez toho, aby byly nečitelné, bylo pracné cvičení. Bitmapy lze převést na soubory jpeg a později soubory png. Úpravy byly výzvou i později, když jsem přešel svůj kancelářský balík na LibreOffice. Naštěstí se dnes většina nástrojů pro snímání obrazovky ukládá v menších formátech, jako je png.

Opensource.com klade určitá omezení na obrázky, které jsou použity v jeho článcích. Vyvinul jsem rychlou tříkrokovou metodu pro přípravu obrázků pro mé články. Prvním krokem je chytře pracovat s přípravou, jako je změna velikosti okna nebo změna písma. Dva další kroky se staly velmi opakujícími se. Ty mají zajistit, aby obrázek nepřesáhl limit šířky 600 pixelů, a použít ohraničení.

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Skript prepimg.sh

Napsal jsem Bash skript s názvem prepimg.sh zvládnout tyto úkoly. Tento skript používá dva nástroje ze sady ImageMagick.

Změnit velikost obrázku

Nástroj pro snímky obrazovky uloží obrázek do Pictures adresář s obecným názvem – něco jako Screenshot-20210923222312.png . Můj prepimg.sh skript zkontroluje šířku pixelů souborů v tomto adresáři a změní velikost souborů, které překračují limit. Tento krok používá identifikace program ze sady ImageMagick k určení šířky (%w).

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

Hodnota šířky je přiřazena proměnné W pro použití jako komparátor do limitu 600. Samotný limit je konfigurovatelný pomocí proměnné $MAXWIDTH . Pokud je určeno, že šířka přesahuje MAXWIDTH, použije se jiný program ImageMagick s názvem convert je volána ke zmenšení šířky obrázku. Zde je funkce zpracování obrazu z mého skriptu:

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

Obrázek se podle potřeby zmenší a uloží do jiného adresáře definovaného pomocí $READY variabilní. V tomto případě je velikost obrázku ve skutečnosti změněna o něco menší – 598 pixelů – aby byl prostor pro přidání ohraničení, které uvedu dále.

Přidejte k obrázku rámeček

Někdy se může zdát, že obrázek splyne s pozadím webové stránky. Je to proto, že barva popředí obrázku až k jeho okraji je stejná jako barva pozadí webu. Zde je příklad:

Jak můžete vidět na obrázku výše, není možné určit, kde je okraj obrázku. Tento problém není omezen na bílou barvu. Záleží na každém jednotlivém webu a barvách motivu, které používá. Pokud je tedy pozadí červené a okraj obrázku je také červený, nastává stejný problém. Můj skript to řeší pomocí konvertovat nářadí. hranice přidá ke každému souboru obrázku ohraničení o velikosti 1 pixel. Tato možnost by sama o sobě stačila, ale chci také nastavit barvu pomocí -bordercolor volba. Zde je příklad:

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

Níže je stejný obrázek s okrajem. Nevypadá to lépe?

Váš obrázek je připraven

Používám for smyčka pro iteraci adresářem snímku obrazovky. Volá funkci process_img pro každý soubor. Funkce zpracovává šířku i okraj. Úplný kód provádí určitou kontrolu zdravého rozumu, například zajišťuje, že soubor je skutečně obrázkem.

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
 }

Posledním krokem skriptu je uložení zpracovaných souborů do podadresáře s názvem Ready , která je určena proměnnou s názvem $READY . Tím se zachovají původní soubory pro další použití.

Použití

Prepimg.sh zahrnuje očekávanou nápovědu popisující její argumenty a jejich použití:

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

Kód a závěr

Kód uvedený v článku je neúplný a měl by být považován za pseudokód. Kompletní skript si můžete prohlédnout v mém úložišti Git.

Sada ImageMagick je výkonná sada nástrojů pro manipulaci s obrázky. Kromě funkcí zahrnutých v mém malém skriptu můžete dělat mnohem více věcí. Korespondent Jim Hall také nedávno psal o jeho použití ke změně velikosti obrázku.

Ať už dáváte přednost Bash skriptování nebo kódování v jiném jazyce, jako je C nebo Python, automatizace je skvělým pomocníkem. Čas od času jsem viděl, jak trocha kódu může snížit tolik bolestí hlavy a umožnit nám lépe využít náš čas.


Linux
  1. Bash skript s `set -e` se nezastaví při příkazu `… &&…`?

  2. Nelze zastavit Bash skript pomocí Ctrl+c?

  3. základní jméno s mezerami ve skriptu bash?

  1. Který Shell Interpreter spouští skript s No Shebang?

  2. Povolení bash.sh ke spuštění cronu odepřeno

  3. Spusťte příkaz bash na jenkins pipeline

  1. Tomuto skriptu nerozumím. Bash?

  2. Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

  3. Zavolejte skript Python z bash s argumentem