Scannen Sie ein Fotoalbum mit einem Skript über die Befehlszeile

Klar gibt es mehrere grafische Oberflächen zum Scannen von Fotos, die zahlreiche Optionen bieten. Aber wenn die Anzahl der zu scannenden Fotos groß ist und wir keinen Scanner mit automatischem Einzelblatteinzug haben, wird es schwierig. Im Allgemeinen müssen Sie einen Klick ausführen, um zu scannen, einen weiteren Klick möglicherweise am anderen Ende des Fensters, um zu speichern ... es braucht Zeit. Wie auch immer, eine gute Ausrede, um das zu benutzen Befehlszeile.

Dies ist ein Beitrag von Rubén und damit einer der Gewinner unseres wöchentlichen Wettbewerbs: «Teilen Sie mit, was Sie über Linux wissen«. Glückwunsch Rubén!

Ich habe die Artikel gelesen Stapelbildverarbeitung mit GIMP y So bearbeiten Sie Bilder vom Terminal aus, genau an dem Tag, an dem mein Freund Huguito mich nach den Fotos (die er verloren hatte) von einer Reise im Jahr 1989 fragte… (4 Rollen mit 36 ​​Fotos! Und natürlich auf Papier 🙂. Es erinnerte mich an diesen Tipp zum Scannen Fotos, die ich vergessen hatte.

Die Idee ist, ein Skript zu verwenden, um dies so schnell wie möglich zu tun:

1.- Legen Sie ein Foto auf den Scanner
2.- Drücken Sie eine beliebige Taste, um zu scannen
3.- Wiederholen Sie den Vorgang, es sei denn, die gedrückte Taste ist zum Beispiel ein 'n' zum Beenden
4.- Die Fotos werden in einem vordefinierten Unterverzeichnis gespeichert und nummeriert.

Welcher Befehl?

Der Befehl 'magic' ist Scanimage, das Teil von SANE ist. SANE ist eine API, die standardisierten Zugriff auf jedes Imaging-Gerät bietet. Die Sane-API ist gemeinfrei und ihr Quellcode steht unter der GNU General Public License zur Verfügung.

Die Installation ist einfach. Jede Distribution bringt ihre Pakete mit. Für Ubuntu (oder seine Derivate) reicht es aus, synaptisch zu verwenden und sane und sane-utils zu installieren.

Wie benutzt man?

Wie immer ist es am besten, in ein Terminal 'man scanimage' zu schreiben. Wir werden jedoch die Optionen zusammenfassen, die wir verwenden werden.

Wir öffnen ein Terminal und führen scanimage -L aus, um die verfügbaren Geräte anzuzeigen:

Scanbild -L

In meinem Fall gibt es zurück:

Gerät `xerox_mfp: libusb: 001: 005 'ist ein Multifunktions-Peripheriegerät von SAMSUNG ORION

Dies ist das Ergebnis, das ich mit meinem Samsung SCX-4200 Multifunktionsgerät erhalten habe. Wenn Sie einen MFP haben und das Gerät nicht finden können, stellen Sie sicher, dass der Drucker nicht aktiv ist, z. B. bei einem ausstehenden Druck.

Der Wert 'xerox_mfp: libusb: 001: 003' wird verwendet, um dem Befehl scanimage mitzuteilen, welches Gerät über die Option -d verwendet werden soll. Wenn nur ein Scanner angeschlossen ist, ist diese Option nicht erforderlich.

Wenn der Befehl scanimage scannt, sendet er das resultierende Bild an die Standardausgabe im PNM- oder TIFF-Format. Zum Scannen leiten wir die Ausgabe in eine Datei um. Und wenn wir sehen wollen, welche Nachrichten der Befehl gibt, fügen wir die Option -v hinzu. Wenn wir auch den Prozentsatz des Fortschritts der Operation sehen möchten, fügen wir die Option -p hinzu.

scanimage -v -p> image.tiff

Scanbild: Scannen von Bildern mit einer Größe von 1284 x 1734 Pixel und 24 Bit / Pixel
Scanimage: RGB-Frame erfassen
Scanbild: Min / Max-Graustufenwert = 69/255
Scanbild: Lesen Sie insgesamt 6679368 Bytes
Fortschritt: 13.8%

Was gibt es uns, wenn wir ein Bild scannen - Hilfe? Es scheint offensichtlich, es gibt eine Hilfe auf dem Befehl. Aber dieser Befehl hat eine Besonderheit. Fügen Sie am Ende der allgemeinen Hilfe für den Befehl die spezifischen Parameter hinzu, die Ihr Scanner akzeptiert.

scanimage --Hilfe

Verwendung: Scanbild [OPTION] ...

BLA bla ....

Gerätespezifische Optionen `xerox_mfp: libusb: 001: 005 ':

Standard:
--auflösung 75 | 100 | 150 | 200 | 300 | 600 dpi [150] Legt die Auflösung des gescannten Bildes fest.
--mode Lineart | Halbton | Grau | Farbe [Farbe] Wählt den Scanmodus aus (z. B. Linear, Monochrom oder Farbe).
--highlight 30..70% (in Schritten von 10) [inaktiv] Wählen Sie die minimale Helligkeit, um einen Weißpunkt zu erhalten
--source Flatbed | ADF | Auto [Flatbed] Wählt die Scanquelle aus (z. B. einen Dokumenteneinzug).
Geometrie:
-l 0..215.9 mm (in Schritten von 1) [0] Oben links x Position des Scanbereichs.
-t 0..297.18mm (in Schritten von 1) [0] Oben links und Position des Scanbereichs.
-x 0..215.9 mm (in Schritten von 1) [215.9] Breite des Scanbereichs.
-y 0..297.18mm (in Schritten von 1) [297.18] Höhe des Scanbereichs.

Geben Sie "scanimage --help -d DEVICE" ein, um eine Liste aller Optionen für DEVICE zu erhalten.

Liste der verfügbaren Geräte:

xerox_mfp: libusb: 001: 005

Von hier aus können wir die Optionen mit den Werten auswählen, die wir verwenden können.

Beispiel:

Auflösung

–Lösung 150

Modus

–Modusfarbe

Nun die Geometrie. Dies ist sehr nützlich, da wir den Scanner anweisen können, nur das Bild eines Sektors zu extrahieren (wo wir das Foto ablegen), und wir sparen die Zeit für das Scannen des Restes der Oberfläche, die wir später auch mit einem Grafikeditor wie z als Gimp.

-l 0 beginnt mit dem horizontalen Scannen ab 0 mm von der oberen linken Ecke des Scanners

-t 0 beginnt mit dem vertikalen Scannen ab 0 mm von der oberen linken Ecke des Scanners

Beachten Sie, dass ich das Foto in die Ecke des Scanners gelegt habe [Koordinaten (0,0)], da es einfacher zu platzieren ist. Auf meinem Scanner (Größe A4) kann ich von 0 auf 215.9 und t von 0 auf 297.18 gehen.

Breite und Höhe des Fotos. In meinem Fall sind die Fotos 13x18cm:

-x 180 breit

-und 130 hoch

Daher wird nur der Teil gescannt, in dem wir unser Foto platziert haben. Natürlich, wenn wir uns einig sind, was links, rechts, die Breite, die Höhe, die Oberseite und die Unterseite ist. Dies hängt davon ab, wie Sie Ihren Scanner betrachten. Ich schlage vor, die Koordinaten zu testen und an Ihre Bedürfnisse anzupassen.

Ein Beispiel für den Befehl könnte sein:

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Farbe --auflösung 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Mit diesen Optionen konnten wir bereits unser Skript erstellen.

Aber vorher…

Tiff oder pnm sind unkomprimierte Formate, sodass unsere Fotos viel Speicherplatz beanspruchen. Hier kommt der ImageMagick-Konvertierungsbefehl ins Spiel, der unter Bearbeiten von Bildern vom Terminal aus erläutert wird.

Wenn wir eine image.pnm vom Scanner erhalten, können wir sie in jpg konvertieren:

konvertiere image.pnm image.jpg

Aber vorher noch ein Trick:

Image.pnm nimmt viel Platz ein und wir sollten es löschen, nachdem wir unsere image.jpg erhalten haben. Es gibt eine Option für den Befehl convert, mit der anstelle einer Datei von der Festplatte die Standardeingabe direkt konvertiert wird. Dies wird mit einem Bindestrich erreicht - anstelle der Datei:

convert - image.jpg

Da scanimage das gescannte Bild an die Standardausgabe liefert, erstellen wir eine "Pipeline" und sparen die Verarbeitungszeit, die zum Schreiben und anschließenden Löschen der Datei image.pnm von der Festplatte benötigt wird.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Farbe --auflösung 150 -l 0 -t 0 -x 180 -y 130 | convert - image.jpg

Nun ja, das Drehbuch ...

Wir schreiben den folgenden Code in eine Datei, die wir scan-album.sh aufrufen, und erteilen ihr die Ausführungsberechtigung. Wenn wir es ausführen, wird ein Unterverzeichnis erstellt, in dem sich unsere gescannten Fotos befinden. Denken Sie daran, die Parameterwerte an Ihre Bedürfnisse anzupassen.

Lesen Sie unbedingt einige Vorschläge nach dem Skript.

#! / Bin / bash
# Daten für Optionen

VERBOSE = "" # siehe Statusmeldung: "" ist nicht; "-v" ist ja
PROGRESS = "- p" # show progress "" ist nein; "-p" ist ja

# Die folgenden Parameter werden von scanimage --help für Ihren Scanner angegeben
#Device: Wenn es nur einen Scanner gibt, ist dies nicht erforderlich. Setzen Sie DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- Modus Farbe"
RESOLUTION = "- Auflösung 600 dpi"

#geometrie, zB 130x180 mm Foto
#Lage im oberen linken Scheitelpunktscanner

x0 = 0
y0 = 0
Breite = 180
hoch = 130

#Optionen:

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

# alle Parameter zusammen:

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

# Name des Albums. Erstellen Sie ein Unterverzeichnis mit Ihrem Namen:

ALBUM = "Holidays_1989"

# Aus Sicherheitsgründen mache ich nichts, wenn das Verzeichnis bereits existiert

mkdir $ ALBUM

if ["$?" = "1"]; dann
Beenden Sie 100
fi

# Basisname für Fotos (in Unterverzeichnis)

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

Funktionsfrage () {
rauswerfen "----------------------------------------------- - ------------------------- "
Echo
rauswerfen "******************************"
echo "Anzahl der gescannten Fotos:" "$ I"
rauswerfen "******************************"
echo -e "Drücken Sie: n * n zum Beenden * Eine weitere Taste zum Scannen."
Echo
read -s -n1 -p "Neues Foto scannen?" Tastendruck
Echo
}

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

# Start

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

I = 0

Frage

while ["$ keypress"! = "n"]; tun
# neues Foto zum Scannen
sei "I + = 1"
NAME = $ FILE $ I.
scanimage $ PARAMETERS | konvertieren - $ NAME.jpg
Frage
erledigt

Vorschläge

Wenn Sie hohe Auflösungen wie im Beispiel verwenden, wird der Scanvorgang viel langsamer.

Denken Sie daran, dass Sie zum Drucken eines Fotos auf Papier etwa 250 Punkte pro Zoll benötigen. Wenn Sie die Fotos scannen möchten, müssen Sie sie in der gleichen Größe wie das Original drucken. Eine Auflösung von 250 reicht aus. Um sie auf einem Monitor anzuzeigen, reichen 100 aus. Eine höhere Auflösung würde für eine Vergrößerung dienen.

Der Fotostapel sollte im Voraus vorbereitet werden, damit sich jedes Foto auf der rechten Seite befindet. Auf diese Weise verschwenden Sie keine Zeit damit, es in den Scanner zu legen, damit es nicht um 180 ° gedreht wird.

Bei der Kalibrierung der Messungen der Geometrieparameter ist es ratsam zu beobachten, an welcher Position das Original platziert werden soll, damit die digitalen Bilder nicht "auf dem Kopf" stehen. In meinem Fall verläuft der untere Teil des Fotos entlang der 'l'-Achse.

Wenn Sie nur einen Scanner angeschlossen haben, können Sie die Option -d nicht verwenden. Im Skript ist es DEV = »»

Manchmal ändern sich die Zahlen in "xerox_mfp: libusb: 001: 003" und Sie müssen sie jedes Mal ändern, wenn Sie das Skript verwenden.

Achten Sie beim Kopieren des Skripts auf Bindestriche und Anführungszeichen. Die Bindestriche (das Minuszeichen) können je nach Option eins oder zwei zusammen sein. Die Anführungszeichen sind das Doppelte der Tastatur. Einige Textverarbeitungsprogramme wie LibreOffice setzen sie nicht ein.

Aus Sicherheitsgründen erstellt das Skript das Verzeichnis nicht, wenn es bereits vorhanden ist, um keine Dateien zu überschreiben, falls vorhanden. In diesem Fall hört es auf.

Wenn das Fotoalbum alt ist, bereuen Sie es nicht, wenn die Bilder reichlich Haare haben, Falten oder Kilo fehlen: -


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Junioren Calderon sagte

    Beeindruckend! Was für ein gutes Tuto!
    Ich hätte nicht gedacht, dass mit der Bash xD so viele Dinge gemacht werden können
    Jeden Tag lernst du mehr!
    Danke für den Input!
    Ich habe keinen Scaner, aber wenn ich einen bekomme, werde ich es sofort versuchen 🙂

  2.   Bauerntölpel sagte

    Wie gut dieser Beitrag mir bei der Digitalisierung meiner Notizen helfen wird, ich hoffe, er verbessert sich. Ich denke an eine Funktion zum Scannen einer vollständigen Datei und zum Erkennen der Größe des gescannten Objekts, da wir von der Bildmagie abhängen können in djvu oder pdf konvertiert werden und so eine einzelne Datei erstellen. Nun, ich bin einfach weitergegangen. Vielen Dank für den Beitrag.

  3.   Liebe es sagte

    Was für eine große Freude, vielen Dank für das Teilen.