Skann et fotoalbum med et skript fra kommandolinjen

Det er tydeligvis flere grafiske grensesnitt for skanning av bilder, som gir mange alternativer. Men når antallet bilder som skal skannes er stort, og vi ikke har en skanner som har en automatisk arkmater, blir det vanskelig. Generelt må du gjøre et klikk for å skanne, et annet klikk kanskje i den andre enden av vinduet for å lagre ... det tar tid. Uansett, en god unnskyldning for å bruke Kommandolinje.

Dette er et bidrag fra Rubén, og blir dermed en av vinnerne av vår ukentlige konkurranse: «Del det du vet om Linux«. Gratulerer Rubén!

Jeg leste artiklene på Gruppebehandling med GIMP y Hvordan manipulere bilder fra terminalen, akkurat den dagen vennen Huguito ba meg om bildene (som han hadde mistet) av en tur vi gjorde i 1989 ... (4 ruller med 36 bilder! Og på papir, selvfølgelig 🙂. Det minnet meg om dette tipset om å skanne fotografier som jeg hadde glemt.

Tanken er å bruke et skript for å gjøre det så raskt som mulig:

1. - Sett et bilde på skanneren
2. - Trykk på hvilken som helst tast for å skanne
3.- Gjenta prosedyren, med mindre tasten som trykkes inn er for eksempel en 'n' for å avslutte
4.- Bildene lagres og nummereres i en forhåndsopprettet underkatalog.

Hvilken kommando?

Kommandoen 'magisk' er scanimage som er en del av SANE. SANE er et API som gir standardisert tilgang til hvilken som helst bildeenhet. Sane API er i det offentlige området, og kildekoden er tilgjengelig under GNU General Public License.

Installasjonen er enkel. Hver distribusjon gir sine pakker. For Ubuntu (eller dets derivater) er det nok å bruke synaptisk og installere sane og sane-utils.

Hvordan å bruke?

Hvor alltid er best å skrive i en terminal 'man scanimage'. Imidlertid vil vi oppsummere alternativene vi vil bruke.

Vi åpner en terminal og kjører scanimage -L for å se tilgjengelige enheter:

scanimage -L

I mitt tilfelle returnerer det:

enhet `xerox_mfp: libusb: 001: 005 'er en SAMSUNG ORION multifunksjons perifer

Dette er resultatet det ga meg med min Samsung SCX-4200 multifunksjon. Hvis du har en MFP og du ikke finner enheten, må du kontrollere at skriveren ikke er aktiv, for eksempel med en utskrift som venter.

Verdien 'xerox_mfp: libusb: 001: 003' brukes til å fortelle kommandoen scanimage hvilken enhet som skal brukes gjennom alternativet -d. Hvis bare en skanner er koblet til, er ikke dette alternativet nødvendig.

Når scanimage-kommandoen skanner, sender den det resulterende bildet til standardutdata i pnm- eller tiff-format. Så for å skanne omdirigerer vi utdataene til en fil. Og hvis vi vil se hvilke meldinger kommandoen gir, legger vi til alternativet -v. Hvis vi også vil se prosentandelen av fremdriften for operasjonen, legger vi til alternativet -p.

scanimage -v -p> image.tiff

scanimage: skannebilde med størrelse 1284x1734 piksler med 24 bits / piksel
scanimage: anskaffer RGB-ramme
scanimage: min / maks gråverdien = 69/255
scanimage: les totalt 6679368 byte
Fremgang: 13.8%

Hva vil det gi oss hvis vi skanner bilde - hjelp? Det virker opplagt, det gir en hjelp på kommandoen. Men denne kommandoen har en egenart. På slutten av generisk hjelp for kommandoen, legg til de spesifikke parametrene som skanneren godtar.

scanimage --hjelp

Bruk: scanimage [OPTION] ...

Bla bla....

Alternativer som er spesifikke for enheten `xerox_mfp: libusb: 001: 005 ':

standard:
--oppløsning 75 | 100 | 150 | 200 | 300 | 600 dpi [150] Angir oppløsningen til det skannede bildet.
--mode Lineart | Halvtone | Grå | Color [Color] Velger skannemodus (f.eks. lineart, monokrom eller farge).
--highlight 30..70% (i trinn på 10) [inaktiv] Velg minimum lysstyrke for å få et hvitt punkt
--source Flatbed | ADF | Auto [Flatbed] Velger skannekilde (for eksempel en dokumentmater).
geometri:
-l 0..215.9mm (i trinn på 1) [0] Øverst til venstre x posisjon av skanneområdet.
-t 0..297.18mm (i trinn på 1) [0] Øverst til venstre og plassering av skanneområdet.
-x 0..215.9mm (i trinn på 1) [215.9] Bredde på skanneområdet.
-y 0..297.18mm (i trinn på 1) [297.18] Skannehøyde.

Skriv inn scanimage --help -d ENHET for å få en liste over alle alternativene for ENHET.

Liste over tilgjengelige enheter:

xerox_mfp: libusb: 001: 005

Herfra kan vi velge alternativene med verdiene vi kan bruke.

Eksempel:

Oppløsning

–Oppløsning 150

Modus

–Modusfarge

Nå geometrien. Dette er veldig nyttig fordi vi kan fortelle skanneren å bare trekke ut bildet av en sektor (hvor vi skal sette fotografiet), og vi sparer tiden for å skanne resten av overflaten som vi også bør kutte senere med en grafisk editor som som Gimp.

-l 0 begynner å skanne horisontalt fra 0 mm fra øvre venstre hjørne av skanneren

-t 0 begynner å skanne vertikalt fra 0 mm fra øvre venstre hjørne av skanneren

Merk at jeg valgte å sette bildet i hjørnet på skanneren [koordinater (0,0)], siden det er lettere å plassere. På skanneren min (A4-størrelse) kan jeg gå fra 0 til 215.9 og t fra 0 til 297.18.

Bredde og høyde på fotografiet. I mitt tilfelle er bildene 13x18cm:

-x 180 bred

-og 130 høye

Derfor vil den bare skanne delen der vi legger bildet vårt. Selvfølgelig, hvis vi blir enige om hva som er venstre, høyre, bredde, høyde, topp og bunn. Det vil avhenge av hvordan du ser på skanneren. Jeg foreslår at du tester koordinatene og tilpasser dem etter dine behov.

Et eksempel på kommandoen kan være:

scanimage -d xerox_mfp: libusb: 001: 003 -p --modus Farge - oppløsning 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Med disse alternativene kunne vi allerede bygge skriptet vårt.

Men før…

Tiff eller pnm er ukomprimerte formater, så bildene våre vil ta en enorm diskplass. Dette er hvor kommandoen ImageMagick convert kommer inn som er forklart i Hvordan manipulere bilder fra terminalen.

Hvis vi får et image.pnm fra skanneren, kan vi konvertere det til jpg:

konverter image.pnm image.jpg

Men før du gjør det, et annet triks:

Image.pnm tar mye plass, og vi bør slette det etter å ha fått image.jpg. Det er et alternativ for konverteringskommandoen, slik at den i stedet for å ta en fil fra disk vil konvertere standardinngang direkte. Dette oppnås med en bindestrek - i stedet for filen:

konverter - image.jpg

Siden scanimage sender ut det skannede bildet til standard utgang, lager vi en "pipeline" og lagrer behandlingstiden det tar å skrive og sletter deretter image.pnm-filen fra disken.

scanimage -d xerox_mfp: libusb: 001: 003 -p --modus Farge - oppløsning 150 -l 0 -t 0 -x 180 -y 130 | konverter - image.jpg

Nå ja, manuset ...

Vi skriver følgende kode i en fil som vi vil kalle scan-album.sh, og vi gir den utføringstillatelse. Når vi kjører den, vil den opprette en underkatalog der de skannede bildene våre vil være. Husk å endre parameterverdiene etter dine behov.

Husk å lese noen forslag etter skriptet.

#! / Bin / bash
# Data for alternativer

VERBOSE = "" # see status msg: "" is not; "-v" er ja
PROGRESS = "- p" # vis fremgang "" er nei; "-p" er ja

# Følgende parametere er gitt av scanimage - hjelp til skanneren
# Enhet: Hvis det bare er en skanner, er det ikke nødvendig, sett DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- mode Color"
RESOLUTION = "- oppløsning 600 dpi"

#geometry, f.eks. 130x180 mm foto
#plassering øverst til venstre toppunktskanner

x0 = 0
y0 = 0
bredde = 180
høy = 130

#opsjoner:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ bredde"
HIGH = "- og $ high"

# alle parametere sammen:

PARAMETERS = "$ DEV $ VERBOSE $ PROGRESS $ MODE $ RESOLUTION $ L $ T $ WIDTH $ HIGH"

# Albumets navn. Opprett en underkatalog med navnet ditt:

ALBUM = "Holidays_1989"

# For sikkerhets skyld gjør jeg ingenting hvis katalogen allerede eksisterer

mkdir $ ALBUM

hvis ["$?" = "1"]; deretter
avkjørsel 100
fi

# Grunnnavn for bilder (i underdir.)

FIL = "./" $ ALBUM "/" $ ALBUM "_foto_"

funksjonsspørsmål () {
kastet ut "----------------------------------------------- - ------------------------- "
savner
kastet ut "******************************"
ekko "Antall skannede bilder:" "$ I"
kastet ut "******************************"
ekko -e "Trykk: n * n for å avslutte * En annen tast for å skanne."
savner
les -s -n1 -p "Skanne et nytt bilde?" tastetrykk
savner
}

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

# Start

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

Jeg = 0

spørsmål

mens ["$ tastetrykk"! = "n"]; gjøre
# nytt bilde å skanne
la "I + = 1"
NAVN = $ FILE $ I
scanimage $ PARAMETERS | konvertere - $ NAME.jpg
spørsmål
gjort

Forslag

Bruk av høye oppløsninger som de i eksemplet gjør skanningen mye tregere.

Husk at hvis du vil skrive ut et bilde på papir, trenger du omtrent 250 prikker per tomme. Hvis ideen med å skanne bildene er å skrive dem ut i samme størrelse som originalen, er oppløsningen 250 nok. Å se dem på en skjerm med 100 er nok. En høyere oppløsning vil tjene til forstørrelse.

Bunken med bilder bør klargjøres på forhånd slik at hvert bilde er på høyre side. På denne måten vil du ikke kaste bort tid på å legge den i skanneren slik at den ikke roteres 180 °.

Når du kalibrerer målingene av geometriparametrene, anbefales det å observere i hvilken posisjon originalen må plasseres, slik at de digitale bildene ikke blir “opp ned”. I mitt tilfelle går den nedre delen av bildet langs 'l' aksen.

Hvis du bare har en skanner tilkoblet, kan du ikke bruke alternativet -d. I skriptet er det DEV = »»

Noen ganger endres tallene i "xerox_mfp: libusb: 001: 003", og du må endre det hver gang du bruker skriptet.

Se opp for bindestrek og sitater når du kopierer manuset. Bindestrekene (minustegnet) kan være en eller to sammen, avhengig av alternativet; anførselstegn er det dobbelte av tastaturet, de er ikke de som noen tekstbehandlere som LibreOffice setter.

For sikkerhets skyld oppretter ikke skriptet katalogen hvis den allerede eksisterer, for ikke å overskrive filer hvis det er noen. I så fall stopper det.

Hvis fotoalbumet er gammelt, kan du ikke angre på at bildene florerer i hår, rynker eller kilo mangler: -


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Juniorer Calderon sa

    Wow! For en god tuto!
    Jeg trodde ikke at så mange ting kunne gjøres med bash xD
    Hver dag lærer du mer!
    Takk for innspillene!
    Jeg har ikke en Scaner, men hvis jeg får en, vil jeg umiddelbart prøve den 🙂

  2.   Rube sa

    Hvor godt dette bidraget vil hjelpe meg mye med digitaliseringen av notatene mine, jeg håper det blir bedre, jeg tenker på en funksjon for å skanne en komplett fil og oppdage størrelsen på det skannede objektet, ettersom vi er avhengige av bildemagikk, kan det konverteres til djvu eller pdf og dermed opprette en enkelt fil. Vel, jeg ramlet bare på. Tusen takk for bidraget.

  3.   elsker det sa

    For stor glede, tusen takk for at du delte.