Scanați un album foto cu un script din linia de comandă

În mod clar, există mai multe interfețe grafice pentru scanarea fotografiilor, care oferă numeroase opțiuni. Dar când numărul de fotografii de scanat este mare și nu avem un scaner care are un alimentator automat de coli, lucrurile se îngreunează. În general, trebuie să faceți un clic pentru a scana, un alt clic poate la celălalt capăt al ferestrei pentru a salva ... este nevoie de timp. Oricum, o scuză bună pentru a utiliza Linie de comanda.

Aceasta este o contribuție a lui Rubén, devenind astfel unul dintre câștigătorii concursului nostru săptămânal: «Distribuiți ceea ce știți despre Linux«. Felicitări Rubén!

Am citit articolele de pe Prelucrarea imaginilor în lot cu GIMP y Cum se manipulează imaginile de la terminal, chiar în ziua în care prietenul meu Huguito mi-a cerut fotografiile (pe care le pierduse) ale unei călătorii pe care am făcut-o în 1989 ... (4 role de 36 de fotografii! și pe hârtie, bineînțeles 🙂. Mi-a amintit acest sfat pentru a scana fotografii pe care le uitasem .

Ideea este să folosiți un script pentru a o face cât mai repede posibil:

1.- Puneți o fotografie pe scaner
2.- Apăsați orice tastă pentru a scana
3.- Repetați procedura, cu excepția cazului în care tasta apăsată este de exemplu un „n” pentru a ieși
4.- Fotografiile vor fi salvate și numerotate într-un subdirector preinstituit.

Ce comandă?

Comanda „magică” este scanimage care face parte din SANE. SANE este un API care oferă acces standardizat la orice dispozitiv de imagine. API-ul Sane este în domeniul public, iar codul său sursă este disponibil sub licența publică generală GNU.

Instalarea este simplă. Fiecare distribuție aduce pachetele sale. Pentru Ubuntu (sau derivatele sale), este suficient să utilizați sinaptic și să instalați sănătos și sănătos-util.

Cum se folosește?

Cât de întotdeauna cel mai bun este să scrieți într-un terminal „man scanimage”. Cu toate acestea, vom rezuma opțiunile pe care le vom folosi.

Deschidem un terminal și rulăm scanimage -L pentru a vedea dispozitivele disponibile:

scanimage -L

În cazul meu se întoarce:

dispozitivul `xerox_mfp: libusb: 001: 005 'este un periferic multifuncțional SAMSUNG ORION

Acesta este rezultatul pe care mi l-a dat cu multifuncționalul meu Samsung SCX-4200. Dacă aveți un all-in-one și nu găsiți dispozitivul, asigurați-vă că imprimanta nu este activă, de exemplu cu o imprimare în așteptare.

Valoarea 'xerox_mfp: libusb: 001: 003' este utilizată pentru a spune comenzii scanimage ce dispozitiv să utilizeze prin opțiunea -d. Dacă este conectat un singur scaner, această opțiune nu este necesară.

Când comanda scanimage scanează, trimite imaginea rezultată la ieșirea standard în format pnm sau tiff. Deci, pentru a scana redirecționăm ieșirea către un fișier. Și dacă vrem să vedem ce mesaje dă comanda, adăugăm opțiunea -v. Dacă dorim să vedem și procentul de progres al operației, adăugăm opțiunea -p.

scanimage -v -p> image.tiff

scanimage: scanare imagine de dimensiune 1284x1734 pixeli la 24 biți / pixel
scanimage: achiziționarea cadrului RGB
scanimage: valoarea min / max a nivelului de gri = 69/255
scanimage: citiți 6679368 octeți în total
Progres: 13.8%

Ce ne va oferi dacă scanăm imaginea - ajutăm? Pare evident, oferă un ajutor la comandă. Dar această poruncă are o particularitate. La sfârșitul ajutorului generic pentru comandă adăugați parametrii specifici pe care scanerul dvs. îi acceptă.

scanimage --help

Utilizare: scanimage [OPTION] ...

BLA bla ....

Opțiuni specifice dispozitivului `xerox_mfp: libusb: 001: 005 ':

standard:
--rezoluție 75 | 100 | 150 | 200 | 300 | 600dpi [150] Setează rezoluția imaginii scanate.
--mode Lineart | Semitonuri | Gri | Culoare [Culoare] Selectează modul de scanare (de exemplu, lineart, monocrom sau color).
--highlight 30..70% (în pași de 10) [inactiv] Selectați luminozitatea minimă pentru a obține un punct alb
--source Flatbed | ADF | Auto [Flatbed] Selectează sursa de scanare (cum ar fi un alimentator de documente).
Geometrie:
-l 0..215.9mm (în pași de 1) [0] Sus-stânga x poziția zonei de scanare.
-t 0..297.18mm (în pași de 1) [0] Stânga sus și poziția zonei de scanare.
-x 0..215.9mm (în pași de 1) [215.9] Lățimea zonei de scanare.
-y 0..297.18mm (în pași de 1) [297.18] Înălțimea zonei de scanare.

Tastați "scanimage --help -d DEVICE" pentru a obține lista tuturor opțiunilor pentru DEVICE.

Lista dispozitivelor disponibile:

xerox_mfp: libusb: 001: 005

De aici putem alege opțiunile cu valorile pe care le putem folosi.

Exemplu:

rezoluție

–Rezoluția 150

Modo

–Culoare mod

Acum geometria. Acest lucru este foarte util, deoarece putem spune scanerului să extragă doar imaginea unui sector (unde vom pune fotografia) și economisim timpul de scanare a restului suprafeței pe care ar trebui să-l tăiem mai târziu cu un editor grafic precum Gimp .

-l 0 începe scanarea orizontală de la 0 mm din colțul din stânga sus al scanerului

-t 0 începe scanarea verticală de la 0 mm din colțul din stânga sus al scanerului

Rețineți că am ales să pun fotografia în colțul scanerului [coordonate (0,0)], deoarece este mai ușor de plasat. Pe scanerul meu (format A4) pot merge de la 0 la 215.9 și t de la 0 la 297.18.

Lățimea și înălțimea fotografiei. În cazul meu fotografiile au 13x18cm:

-x 180 lățime

-și 130 înălțime

Prin urmare, va scana doar partea în care ne-am pus fotografia. Desigur, dacă suntem de acord cu ceea ce este stânga, dreapta, lățimea, înălțimea, partea de sus și partea de jos. Va depinde de modul în care vă uitați la scaner. Vă sugerez să testați coordonatele și să le adaptați la nevoile dvs.

Un exemplu de comandă ar putea fi:

scanimage -d xerox_mfp: libusb: 001: 003 -p --mod Color --resolution 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Cu aceste opțiuni, am putea deja să ne construim scriptul.

Dar înainte…

Tiff sau pnm sunt formate necomprimate, astfel încât fotografiile noastre vor ocupa spațiu uriaș pe disc. Aici intervine comanda de conversie ImageMagick, care este explicată în Cum se manipulează imaginile de la terminal.

Dacă obținem o imagine.pnm de pe scaner, o putem converti în jpg:

converti image.pnm image.jpg

Dar înainte de a face acest lucru, un alt truc:

Image.pnm ocupă mult spațiu și ar trebui să-l ștergem după ce ne-am obținut image.jpg. Există o opțiune pentru comanda convert, astfel încât, în loc să preia un fișier de pe disc, acesta va converti direct intrarea standard. Acest lucru se realizează cu o liniuță - în locul fișierului:

convert - image.jpg

Deoarece scanimage oferă imaginea scanată la ieșirea standard, realizăm o „conductă” și salvăm timpul de procesare necesar pentru a scrie și apoi ștergem fișierul image.pnm de pe disc.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mod Color --resolution 150 -l 0 -t 0 -x 180 -y 130 | convert - image.jpg

Acum da, scenariul ...

Scriem următorul cod într-un fișier pe care îl vom numi scan-album.sh și îi acordăm permisiunea de execuție. Când îl rulăm, acesta va crea un subdirector unde vor fi fotografiile scanate. Nu uitați să modificați valorile parametrilor în funcție de nevoile dvs.

Asigurați-vă că citiți câteva sugestii după scenariu.

#! / Bin / bash
# Date pentru opțiuni

VERBOSE = "" # vezi msg de stare: "" nu este; „-v” este da
PROGRESS = "- p" # arată progresul "" este nu; „-p” este da

# Următorii parametri sunt dați de scanimage --help pentru scaner
#Device: Dacă există un singur scaner, nu este necesar, puneți DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- Culoare mod"
REZOLUȚIE = "- rezoluție 600 dpi"

#geometrie, de ex. fotografie 130x180 mm
#location în scanerul de vârf stânga sus

x0 = 0
y0 = 0
lățime = 180
mare = 130

#Opțiuni:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ width"
HIGH = "- și $ high"

# toți parametrii împreună:

PARAMETRI = "$ DEV $ VERBOSE $ PROGRESS $ MODE $ RESOLUȚIE $ L $ T $ LĂȚIME $ HIGH"

# Numele albumului. Creați un subdirector cu numele dvs.:

ALBUM = "Sărbători_1989"

# Pentru securitate, nu fac nimic dacă directorul există deja

mkdir $ ALBUM

dacă ["$?" = "1"]; atunci
iesirea 100
fi

# Numele de bază pentru fotografii (în sub dir)

FILE = "./" $ ALBUM "/" $ ALBUM "_foto_"

întrebare funcție () {
aruncat "----------------------------------------------- - ------------------------- "
ecou
aruncat "******************************"
ecou "Nr. fotografii scanate:" "$ I"
aruncat "******************************"
echo -e "Apăsați: n * n pentru a ieși * O altă tastă de scanat."
ecou
read -s -n1 -p "Scanați o fotografie nouă?" apăsarea tastei
ecou
}

##################################################

# Start

##################################################

I = 0

întrebare

în timp ce ["$ keypress"! = "n"]; do
# fotografie nouă de scanat
să „I + = 1”
NAME = $ FILE $ I
scanimage $ PARAMETRI | convert - $ NAME.jpg
întrebare
făcut

Traduceri

Utilizarea rezoluțiilor ridicate, precum cele din exemplu, face scanarea mult mai lentă.

Rețineți că, dacă doriți să imprimați o fotografie pe hârtie, aveți nevoie de aproximativ 250 de puncte per inch. Dacă ideea scanării fotografiilor este de a le imprima la aceeași dimensiune ca și originalul, este suficientă o rezoluție de 250. Pentru a le vedea pe un monitor, este suficientă 100. O rezoluție mai mare ar servi pentru o mărire.

Teancul de fotografii trebuie pregătit în avans, astfel încât fiecare fotografie să fie pe partea dreaptă. În acest fel, nu veți pierde timpul introducându-l în scaner, astfel încât să nu fie rotit la 180º.

La calibrarea măsurătorilor parametrilor geometriei, este recomandabil să observați în ce poziție trebuie așezat originalul, astfel încât imaginile digitale să nu fie „cu capul în jos”. În cazul meu, partea inferioară a fotografiei merge de-a lungul axei „l”.

Dacă aveți conectat un singur scaner, nu folosiți opțiunea -d. În script este DEV = »»

Uneori numerele din „xerox_mfp: libusb: 001: 003” se schimbă și va trebui să o modificați de fiecare dată când utilizați scriptul.

Aveți grijă la cratime și citate când copiați scriptul. Cratimele (semnul minus) pot fi una sau două împreună în funcție de opțiune; ghilimelele sunt dublul tastaturii, nu sunt cele pe care le-au pus unele procesoare de text precum LibreOffice.

Pentru securitate, scriptul nu creează directorul dacă acesta există deja, pentru a nu suprascrie fișierele dacă există. În acest caz se oprește.

Dacă albumul foto este vechi, nu regretați dacă imaginile au păr abundent, riduri sau kilograme lipsesc: -


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Juniori Calderon el a spus

    Wow! Ce tuto bun!
    Nu credeam că se pot face atât de multe lucruri cu bash xD
    În fiecare zi afli mai multe!
    Vă mulțumim pentru contribuție!
    Nu am un scaner, dar dacă primesc unul, îl voi încerca imediat 🙂

  2.   Rube el a spus

    Cât de bine mă va ajuta foarte mult această contribuție la digitalizarea notelor mele, sper să se îmbunătățească, mă gândesc la o funcție de scanare a unui fișier complet și de detectare a dimensiunii obiectului scanat, deoarece depindem de magia imaginii, poate fi convertită în djvu sau pdf și astfel creați un singur fișier. Ei bine, tocmai am mers. Vă mulțumesc foarte mult pentru contribuție.

  3.   place el a spus

    Ce mare plăcere, vă mulțumesc foarte mult pentru partajare.