Scan een fotoalbum met een script vanaf de opdrachtregel

Er zijn er duidelijk meerdere grafische interfaces voor het scannen van foto's, die tal van opties bieden. Maar als het aantal te scannen foto's groot is en we geen scanner hebben met een automatische velleninvoer, wordt het moeilijk. Over het algemeen moet je een klik doen om te scannen, een andere klik misschien aan de andere kant van het venster om op te slaan ... het kost tijd. Hoe dan ook, een goed excuus om de Opdrachtregel.

Dit is een bijdrage van Rubén, waarmee hij een van de winnaars werd van onze wekelijkse wedstrijd: «Deel wat je weet over Linux«. Gefeliciteerd Rubén!

Ik las de artikelen verder Batch-beeldverwerking met GIMP y Hoe afbeeldingen van de terminal te manipuleren, precies de dag dat mijn vriend Huguito me vroeg naar de foto's (die hij was kwijtgeraakt) van een reis die we in 1989 maakten ... (4 rollen van 36 foto's! en op papier natuurlijk 🙂. Het deed me denken aan deze tip om te scannen foto's die ik was vergeten.

Het idee is om een ​​script te gebruiken om het zo snel mogelijk te doen:

1. - Leg een foto op de scanner
2. - Druk op een willekeurige toets om te scannen
3.- Herhaal de procedure, tenzij de ingedrukte toets bijvoorbeeld een 'n' is om af te sluiten
4.- De foto's worden opgeslagen en genummerd in een vooraf ingestelde submap.

Welk bevel?

Het 'magische' commando is scanimage dat deel uitmaakt van SANE. SANE is een API die gestandaardiseerde toegang biedt tot elk beeldapparaat. De Sane API is in het publieke domein en de broncode is beschikbaar onder de GNU General Public License.

De installatie is eenvoudig. Elke distributie brengt zijn pakketten mee. Voor Ubuntu (of zijn afgeleiden) is het voldoende om synaptic te gebruiken en sane en sane-utils te installeren.

Hoe te gebruiken?

Hoe altijd het beste is om in een terminal 'man scanimage' te schrijven. We zullen echter de opties die we zullen gebruiken samenvatten.

We openen een terminal en draaien scanimage -L om de beschikbare apparaten te zien:

scanafbeelding -L

In mijn geval keert het terug:

apparaat `xerox_mfp: libusb: 001: 005 'is een SAMSUNG ORION multifunctioneel randapparaat

Dit is het resultaat dat ik kreeg met mijn Samsung SCX-4200 multifunctioneel apparaat. Als je een all-in-one hebt en je kunt het apparaat niet vinden, zorg er dan voor dat de printer niet actief is, bijvoorbeeld met een wachtende print.

De waarde 'xerox_mfp: libusb: 001: 003' wordt gebruikt om de scanimage-opdracht te vertellen welk apparaat moet worden gebruikt via de optie -d. Als er maar één scanner is aangesloten, is deze optie niet nodig.

Wanneer het scanimage-commando scant, stuurt het het resulterende beeld naar standaarduitvoer in pnm- of tiff-formaat. Dus om te scannen sturen we de uitvoer om naar een bestand. En als we willen zien welke berichten de opdracht geeft, voegen we de optie -v toe. Als we ook het voortgangspercentage van de operatie willen zien, voegen we de optie -p toe.

scanimage -v -p> image.tiff

scanimage: scanbeeld van 1284x1734 pixels bij 24 bits / pixel
scanimage: RGB-frame verwerven
scanimage: min / max grijsniveau waarde = 69/255
scanimage: lees in totaal 6679368 bytes
Voortgang: 13.8%

Wat geeft het ons als we afbeeldingen scannen - helpen? Het lijkt voor de hand liggend, het geeft hulp bij het commando. Maar deze opdracht heeft een eigenaardigheid. Voeg aan het einde van de algemene help voor de opdracht de specifieke parameters toe die uw scanner accepteert.

scanafbeelding --help

Gebruik: scanimage [OPTION] ...

Blabla....

Opties die specifiek zijn voor het apparaat 'xerox_mfp: libusb: 001: 005':

standaard:
--resolutie 75 | 100 | 150 | 200 | 300 | 600dpi [150] Stelt de resolutie van de gescande afbeelding in.
--mode Lineart | Halftone | Gray | Color [Color] Selecteert de scanmodus (bijv. Lineart, monochroom of kleur).
--highlight 30..70% (in stappen van 10) [inactief] Selecteer minimale helderheid om een ​​witpunt te krijgen
--bron Flatbed | ADF | Auto [Flatbed] Selecteert de scanbron (zoals een documentinvoer).
Geometry:
-l 0..215.9 mm (in stappen van 1) [0] Linksboven x positie van scangebied.
-t 0..297.18 mm (in stappen van 1) [0] Linksboven en positie van scangebied.
-x 0..215.9 mm (in stappen van 1) [215.9] Breedte van scangebied.
-y 0..297.18 mm (in stappen van 1) [297.18] Hoogte van scangebied.

Typ `` scanimage --help -d DEVICE '' voor een lijst met alle opties voor DEVICE.

Lijst met beschikbare apparaten:

xerox_mfp: libusb: 001: 005

Van hieruit kunnen we de opties kiezen met de waarden die we kunnen gebruiken.

voorbeeld:

Resolutie

–Resolutie 150

Mode

–Mode Kleur

Nu de geometrie. Dit is erg handig omdat we de scanner kunnen vertellen om alleen de afbeelding van een sector te extraheren (waar we de foto zullen plaatsen), en we besparen de tijd van het scannen van de rest van het oppervlak dat we later ook zouden moeten knippen met een grafische editor zoals als Gimp.

-l 0 begint horizontaal te scannen vanaf 0 mm vanaf de linkerbovenhoek van de scanner

-t 0 begint verticaal te scannen vanaf 0 mm vanaf de linkerbovenhoek van de scanner

Merk op dat ik ervoor heb gekozen om de foto in de hoek van de scanner te plaatsen [coördinaten (0,0)], omdat deze gemakkelijker te plaatsen is. Op mijn scanner (A4-formaat) kan ik van 0 naar 215.9 gaan en t van 0 naar 297.18.

Breedte en hoogte van de foto. In mijn geval zijn de foto's 13x18cm:

-x 180 breed

-en 130 hoog

Daarom scant het alleen het gedeelte waar we onze foto hebben geplaatst. Natuurlijk, als we het eens zijn over wat links, rechts, de breedte, de hoogte, de bovenkant en de onderkant is. Het hangt ervan af hoe u naar uw scanner kijkt. Ik stel voor om de coördinaten te testen en aan te passen aan uw behoeften.

Een voorbeeld van de opdracht zou kunnen zijn:

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Kleur --resolutie 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Met deze opties zouden we ons script al kunnen bouwen.

Maar voorheen…

Tiff of pnm zijn niet-gecomprimeerde formaten, dus onze foto's nemen een enorme schijfruimte in beslag. Hier komt de opdracht ImageMagick converteren binnen, die wordt uitgelegd in Hoe afbeeldingen vanaf de terminal te manipuleren.

Als we een image.pnm van de scanner krijgen, kunnen we deze naar jpg converteren:

converteer image.pnm image.jpg

Maar voordat je dit doet, nog een truc:

Image.pnm neemt veel ruimte in beslag en we moeten het verwijderen nadat we onze image.jpg hebben opgehaald. Er is een optie voor de opdracht convert, zodat in plaats van een bestand van de schijf te nemen, het standaardinvoer direct zal converteren. Dit wordt bereikt met een streepje - in plaats van het bestand:

converteren - afbeelding.jpg

Aangezien scanimage de gescande afbeelding naar de standaarduitvoer levert, maken we een "pijplijn" en besparen we de verwerkingstijd die nodig is om het bestand image.pnm te schrijven en vervolgens van de schijf te verwijderen.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Kleur --resolutie 150 -l 0 -t 0 -x 180 -y 130 | converteren - afbeelding.jpg

Nu ja, het script ...

We schrijven de volgende code in een bestand dat we scan-album.sh zullen noemen en we geven het uitvoeringsmachtiging. Wanneer we het uitvoeren, zal het een submap creëren waar onze gescande foto's zullen zijn. Vergeet niet om de parameterwaarden aan te passen aan uw behoeften.

Lees zeker enkele suggesties na het script.

#! / Bin / bash
# Gegevens voor opties

VERBOSE = "" # zie status msg: "" is niet; "-v" is ja
PROGRESS = "- p" # voortgang weergeven "" is nee; "-p" is ja

# De volgende parameters worden gegeven door scanimage --help voor uw scanner
#Device: Als er maar één scanner is, is dit niet nodig, zet DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- mode Kleur"
RESOLUTION = "- resolutie 600dpi"

#geometrie, bijv. foto 130x180 mm
#locatie in de hoekpuntscanner linksboven

x0 = 0
y0 = 0
breedte = 180
hoog = 130

#opties:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ breedte"
HIGH = "- en $ hoog"

# alle parameters samen:

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

# Naam van het album. Maak een submap met uw naam:

ALBUM = "Feestdagen_1989"

# Voor de veiligheid doe ik niets als de directory al bestaat

mkdir $ ALBUM

als ["$?" = "1"]; vervolgens
verlaat 100
fi

# Basisnaam voor foto's (in sub-map)

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

functie vraag () {
gooide uit "----------------------------------------------- - ------------------------- "
echo
gooide uit "******************************"
echo "Aantal gescande foto's:" "$ I"
gooide uit "******************************"
echo -e "Druk op: n * n om af te sluiten * Another key to scan."
echo
read -s -n1 -p "Scan een nieuwe foto?" toets indrukken
echo
}

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

# Start

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

I = 0

vraag

while ["$ keypress"! = "n"]; Doen
# nieuwe foto om te scannen
laat "I + = 1"
NAAM = $ BESTAND $ I
scanimage $ PARAMETERS | converteren - $ NAME.jpg
vraag
gedaan

Tips

Als u hoge resoluties gebruikt, zoals in het voorbeeld, wordt de scan veel langzamer.

Houd er rekening mee dat als u een foto op papier wilt afdrukken, u ongeveer 250 dots per inch nodig heeft. Als het idee van het scannen van de foto's is om ze af te drukken op hetzelfde formaat als het origineel, is een resolutie van 250. Om ze op een monitor te zien, is 100 voldoende. Een hogere resolutie zou dienen voor een vergroting.

De stapel foto's moet van tevoren worden voorbereid, zodat elke foto aan de rechterkant staat. Op deze manier verspilt u geen tijd door het in de scanner te plaatsen zodat ze niet 180 ° worden gedraaid.

Bij het kalibreren van de metingen van de geometrie parameters is het raadzaam om te kijken in welke positie het origineel geplaatst moet worden, zodat de digitale beelden niet “ondersteboven” staan. In mijn geval loopt het onderste deel van de foto langs de 'l'-as.

Als u slechts één scanner heeft aangesloten, kunt u de optie -d niet gebruiken. In het script is dit DEV = »»

Soms veranderen de getallen in "xerox_mfp: libusb: 001: 003" en moet u deze elke keer dat u het script gebruikt, wijzigen.

Pas op voor koppeltekens en aanhalingstekens bij het kopiëren van het script. De koppeltekens (het minteken) kunnen één of twee tegelijk zijn, afhankelijk van de optie; de aanhalingstekens zijn het dubbele van het toetsenbord, ze zijn niet degene die sommige tekstverwerkers zoals LibreOffice plaatsen.

Om veiligheidsredenen maakt het script de directory niet aan als deze al bestaat, om eventuele bestanden niet te overschrijven. In dat geval stopt het.

Als het fotoalbum oud is, heb dan geen spijt als de afbeeldingen rijk zijn aan haar, rimpels of kilo's ontbreken: -


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Junioren Calderon zei

    Wauw! Wat een goede tuto!
    Ik dacht niet dat er zoveel dingen konden worden gedaan met de bash xD
    Elke dag leer je meer!
    Bedankt voor de ingang!
    Ik heb geen Scaner, maar als ik er een krijg, probeer ik het meteen 🙂

  2.   Rube zei

    Hoe goed deze bijdrage me veel zal helpen bij het digitaliseren van mijn aantekeningen, ik hoop dat het verbetert, ik denk aan een functie om een ​​volledig bestand te scannen en de grootte van het gescande object te detecteren, aangezien we afhankelijk zijn van beeldmagie, kan het worden geconverteerd naar djvu of pdf en zo een enkel bestand maken. Nou, ik liep gewoon door. Heel erg bedankt voor de bijdrage.

  3.   hou ervan zei

    Wat een genoegen, heel erg bedankt voor het delen.