Skanna ett fotoalbum med ett skript från kommandoraden

Uppenbarligen finns det flera grafiska gränssnitt för skanning av foton, som ger många alternativ. Men när antalet foton som ska skannas är stort och vi inte har en skanner som har en automatisk arkmatare, blir det svårt. Generellt måste du göra ett klick för att skanna, ett annat klick kanske i andra änden av fönstret för att spara ... det tar tid. Hur som helst, en bra ursäkt för att använda Kommandorad.

Detta är ett bidrag från Rubén och blir därmed en av vinnarna av vår veckotävling: «Dela vad du vet om Linux«. Grattis Rubén!

Jag läste artiklarna om Batchbildbehandling med GIMP y Hur man manipulerar bilder från terminalen, just den dagen min vän Huguito frågade mig om bilderna (som han hade tappat bort) av en resa vi gjorde 1989 ... (4 rullar med 36 bilder! Och på papper, naturligtvis 🙂. Det påminde mig om detta tips att skanna fotografier som jag hade glömt.

Tanken är att använda ett manus för att göra det så snabbt som möjligt:

1. - Lägg ett foto på skannern
2. - Tryck på valfri knapp för att skanna
3.- Upprepa proceduren, såvida inte tangenten som trycks ned är till exempel en 'n' för att avsluta
4.- Bilderna sparas och numreras i en förinställd underkatalog.

Vilket kommando?

Kommandot 'magi' är scanimage som ingår i SANE. SANE är ett API som ger standardiserad åtkomst till alla bildbehandlingsenheter. Sane API är offentligt och dess källkod är tillgänglig under GNU General Public License.

Installationen är enkel. Varje distribution ger sina paket. För Ubuntu (eller dess derivat) räcker det att använda synaptic och installera sane och sane-utils.

Hur man använder?

Hur alltid det bästa är att skriva i en terminal "man scanimage". Vi kommer dock att sammanfatta alternativen vi kommer att använda.

Vi öppnar en terminal och kör scanimage -L för att se tillgängliga enheter:

scanimage -L

I mitt fall återkommer det:

enhet `xerox_mfp: libusb: 001: 005 'är en SAMSUNG ORION-multifunktionsutrustning

Detta är resultatet det gav mig med min Samsung SCX-4200 multifunktion. Om du har en MFP och du inte hittar enheten, se till att skrivaren inte är aktiv, till exempel med en väntande utskrift.

Värdet 'xerox_mfp: libusb: 001: 003' används för att berätta för scanimage-kommandot vilken enhet som ska användas via alternativet -d. Om bara en skanner är ansluten är detta alternativ inte nödvändigt.

När scanimage-kommandot skannar skickas den resulterande bilden till standardutdata i pnm- eller tiff-format. Så för att skanna omdirigerar vi utdata till en fil. Och om vi vill se vilka meddelanden kommandot ger, lägger vi till alternativet -v. Om vi ​​också vill se procentandelen av förloppet för operationen lägger vi till alternativet -p.

scanimage -v -p> image.tiff

scanimage: skanningsbild i storlek 1284x1734 pixlar med 24 bitar / pixel
scanimage: förvärvar RGB-ram
scanimage: min / max grå nivå = 69/255
scanimage: läs totalt 6679368 byte
Framsteg: 13.8%

Vad kommer det att ge oss om vi gör scanimage –help? Det verkar självklart, det ger hjälp på kommandot. Men detta kommando har en egenart. I slutet av den generiska hjälpen för kommandot, lägg till de specifika parametrar som din skanner accepterar.

scanimage --hjälp

Användning: scanimage [OPTION] ...

Bla bla....

Alternativ som är specifika för enheten `xerox_mfp: libusb: 001: 005 ':

standard:
--upplösning 75 | 100 | 150 | 200 | 300 | 600 dpi [150] Ställer in upplösningen för den skannade bilden.
--mode Lineart | Halvton | Grå | Färg [Color] Väljer skanningsläge (t.ex. lineart, monokrom eller färg).
--highlight 30..70% (i steg om 10) [inaktiv] Välj minsta ljusstyrka för att få en vit punkt
--source Flatbed | ADF | Auto [Flatbed] Väljer skanningskälla (t.ex. en dokumentmatare).
geometri:
-l 0..215.9mm (i steg om 1) [0] Överst till vänster x position för skanningsområdet.
-t 0..297.18mm (i steg om 1) [0] Överst till vänster och position för skanningsområdet.
-x 0..215.9mm (i steg om 1) [215.9] Bredd på skanningsområdet.
-y 0..297.18mm (i steg om 1) [297.18] Skanningsområdets höjd.

Skriv '' scanimage --help -d ENHET '' för att få en lista över alla alternativ för ENHET.

Lista över tillgängliga enheter:

xerox_mfp: libusb: 001: 005

Härifrån kan vi välja alternativen med de värden som vi kan använda.

Exempelvis:

upplösning

–Opplösning 150

Mode

–Modefärg

Nu geometrin. Detta är mycket användbart eftersom vi kan säga till skannern att endast extrahera bilden från en sektor (där vi ska sätta fotografiet), och vi sparar tid att skanna resten av ytan som vi också borde klippa senare med en grafikredigerare som som Gimp.

-l 0 börjar skanna horisontellt från 0 mm från skannerns övre vänstra hörn

-t 0 börjar skanna vertikalt från 0 mm från skannerns övre vänstra hörn

Observera att jag valde att placera fotot i hörnet på skannern [koordinater (0,0)], eftersom det är lättare att placera. På min skanner (A4-storlek) kan jag gå från 0 till 215.9 och t från 0 till 297.18.

Fotografiets bredd och höjd. I mitt fall är bilderna 13x18cm:

-x 180 bred

-och 130 höga

Därför kommer det bara att skanna den del där vi lägger vårt foto. Naturligtvis, om vi är överens om vad som är vänster, höger, bredd, höjd, topp och botten. Det beror på hur du ser på din skanner. Jag föreslår att testa koordinaterna och anpassa dem efter dina behov.

Ett exempel på kommandot kan vara:

scanimage -d xerox_mfp: libusb: 001: 003 -p --läge Färg --upplösning 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Med dessa alternativ kunde vi redan bygga vårt skript.

Men innan…

Tiff eller pnm är okomprimerade format, så våra foton tar enormt diskutrymme. Det är här kommandot ImageMagick convert kommer in som förklaras i Hur man manipulerar bilder från terminalen.

Om vi ​​får en image.pnm från skannern kan vi konvertera den till jpg:

konvertera image.pnm image.jpg

Men innan du gör det, ett annat trick:

Image.pnm tar mycket utrymme och vi bör ta bort det efter att vi fått vår image.jpg. Det finns ett alternativ för konvertera kommandot så att istället för att ta en fil från disk kommer den direkt att konvertera standardinmatning. Detta åstadkommes med en streck - istället för filen:

konvertera - image.jpg

Eftersom scanimage levererar den skannade bilden till standardutmatning gör vi en "pipeline" och sparar behandlingstiden det tar att skriva och tar sedan bort image.pnm-filen från disken.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Färg --upplösning 150 -l 0 -t 0 -x 180 -y 130 | konvertera - image.jpg

Nu ja, manuset ...

Vi skriver följande kod i en fil som vi kommer att kalla scan-album.sh och vi ger den exekveringsbehörighet. När vi kör den kommer den att skapa en underkatalog där våra skannade bilder kommer att finnas. Kom ihåg att ändra parametervärdena efter dina behov.

Var noga med att läsa några förslag efter manuset.

#! / Bin / bash
# Data för alternativ

VERBOSE = "" # se status msg: "" är inte; "-v" är ja
PROGRESS = "- p" # visa framsteg "" är nej; "-p" är ja

# Följande parametrar ges av scanimage --hjälp för din skanner
#Device: Om det bara finns en skanner är det inte nödvändigt, sätt DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- mode Color"
RESOLUTION = "- upplösning 600 dpi"

#geometri, t.ex. 130x180 mm foto
#placering i övre vänstra vertexskannern

x0 = 0
y0 = 0
bredd = 180
hög = 130

#alternativ:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ bredd"
HIGH = "- och $ high"

# alla parametrar tillsammans:

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

# Albumets namn. Skapa en underkatalog med ditt namn:

ALBUM = "Holidays_1989"

# För säkerhet gör jag ingenting om katalogen redan finns

mkdir $ ALBUM

om ["$?" = "1"]; sedan
avsluta 100
fi

# Basnamn för foton (i underdir)

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

funktionsfråga () {
kastade ut "------------------------------------------------ ------------------------- "
missar
kastade ut "******************************"
eko "Antal skannade foton:" "$ I"
kastade ut "******************************"
echo -e "Tryck på: n * n för att avsluta * Ytterligare en knapp att skanna."
missar
läs -s -n1 -p "Skanna ett nytt foto?" knapptryckning
missar
}

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

# Start

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

I = 0

fråga

medan ["$ tangenttryckning"! = "n"]; do
# nytt foto att skanna
låt "I + = 1"
NAMN = $ FIL $ I
scanimage $ PARAMETERS | konvertera - $ NAME.jpg
fråga
gjort

Förslag

Att använda höga upplösningar som i exemplet gör skanningen mycket långsammare.

Tänk på att om du vill skriva ut ett foto på papper behöver du cirka 250 punkter per tum. Om tanken på att skanna foton är att skriva ut dem i samma storlek som originalet räcker det med en upplösning på 250. Att se dem på en bildskärm med 100 räcker. En högre upplösning skulle tjäna som förstoring.

Fotostapeln bör förberedas i förväg så att varje foto är på höger sida. På det här sättet slösar du inte bort tiden med att lägga den i skannern så att de inte roteras 180 °.

Vid kalibrering av mätningarna av geometriparametrarna är det tillrådligt att observera i vilken position originalet ska placeras så att de digitala bilderna inte är "upp och ner". I mitt fall går den nedre delen av fotot längs 'l' axeln.

Om du bara har en ansluten skanner är du välkommen att inte använda alternativet -d. I manuset är det DEV = »»

Ibland ändras siffrorna i "xerox_mfp: libusb: 001: 003" och du måste ändra det varje gång du använder skriptet.

Se upp för bindestreck och citat när du kopierar manuset. Bindestrecken (minustecknet) kan vara en eller två tillsammans beroende på alternativet; citattecken är dubbla på tangentbordet, det är inte de som vissa ordbehandlare som LibreOffice sätter.

För säkerhets skull skapar inte katalogen katalogen om den redan finns, för att inte skriva över filer om det finns några. I så fall stannar det.

Om fotoalbumet är gammalt ska du inte ångra om bilderna finns i hår, rynkor eller kilo saknas: -


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Juniorer Calderon sade

    Wow! Vilken bra tuto!
    Jag trodde inte att så många saker kunde göras med bash xD
    Varje dag lär du dig mer!
    Tack för input!
    Jag har ingen Scaner men om jag får en, ska jag omedelbart prova den 🙂

  2.   Rube sade

    Hur bra detta bidrag kommer att hjälpa mig mycket i digitaliseringen av mina anteckningar, jag hoppas att det förbättras, jag tänker på en funktion för att skanna en fullständig fil och upptäcka storleken på det skannade objektet, eftersom vi är beroende av bild magick, det kan konverteras till djvu eller pdf och därmed skapa en enda fil. Jag sprang bara vidare. Tack så mycket för bidraget.

  3.   älskar det sade

    Vilket stort nöje, tack så mycket för att ni delar.