Zeskanuj album ze zdjęciami za pomocą skryptu z wiersza poleceń

Oczywiście jest ich kilka graficzne interfejsy do skanowania zdjęć, które zapewniają wiele opcji. Ale kiedy liczba zdjęć do zeskanowania jest duża i nie mamy skanera z automatycznym podajnikiem arkuszy, sprawy stają się trudne. Zwykle musisz kliknąć, aby zeskanować, kolejne kliknięcie być może na drugim końcu okna, aby zapisać ... zajmuje to trochę czasu. W każdym razie to dobra wymówka, aby użyć Wiersz poleceń.

To wkład od Rubéna, stając się tym samym jednym ze zwycięzców naszego cotygodniowego konkursu: «Podziel się swoją wiedzą o Linuksie«. Gratulacje Rubén!

Czytałem artykuły na temat Batch Image Processing with GIMP y Jak manipulować obrazami z terminala, właśnie tego dnia, kiedy mój przyjaciel Huguito poprosił mnie o zdjęcia (które zgubił) z wycieczki, którą odbyliśmy w 1989 roku… (4 rolki po 36 zdjęć! i oczywiście na papierze 🙂. Przypomniało mi się o tej wskazówce do skanowania zdjęcia, o których zapomniałem.

Chodzi o to, aby użyć skryptu, aby zrobić to tak szybko, jak to możliwe:

1. - Umieść zdjęcie na skanerze
2. - Naciśnij dowolny klawisz, aby skanować
3. - Powtórz procedurę, chyba że naciśnięty klawisz to na przykład „n”, aby wyjść
4.- Zdjęcia zostaną zapisane i ponumerowane we wcześniej ustalonym podkatalogu.

Jakie polecenie?

Polecenie „magiczne” to scanimage, które jest częścią SANE. SANE to interfejs API zapewniający ustandaryzowany dostęp do dowolnego urządzenia do przetwarzania obrazu. Sane API jest własnością publiczną, a jego kod źródłowy jest dostępny na warunkach Powszechnej Licencji Publicznej GNU.

Instalacja jest prosta. Każda dystrybucja przynosi swoje pakiety. W przypadku Ubuntu (lub jego pochodnych) wystarczy użyć synaptic i zainstalować rozsądne i rozsądne narzędzia.

Jak używać?

Jak zawsze najlepiej jest napisać w terminalu „ludzką chęć”. Jednak podsumujemy opcje, z których będziemy korzystać.

Otwieramy terminal i uruchamiamy scanimage -L, aby zobaczyć dostępne urządzenia:

obraz skanu -L

W moim przypadku zwraca:

urządzenie `xerox_mfp: libusb: 001: 005 'to wielofunkcyjne urządzenie peryferyjne SAMSUNG ORION

Taki efekt dał mi mój wielofunkcyjny Samsung SCX-4200. Jeśli masz urządzenie wielofunkcyjne i nie możesz go znaleźć, upewnij się, że drukarka nie jest aktywna, na przykład z oczekującym wydrukiem.

Wartość „xerox_mfp: libusb: 001: 003” jest używana do informowania komendy scanimage, którego urządzenia należy użyć za pomocą opcji -d. Jeśli podłączony jest tylko jeden skaner, ta opcja nie jest konieczna.

Kiedy polecenie scanimage skanuje, wysyła wynikowy obraz na standardowe wyjście w formacie pnm lub tiff. Aby więc skanować, przekierowujemy dane wyjściowe do pliku. A jeśli chcemy zobaczyć, jakie komunikaty przekazuje polecenie, dodajemy opcję -v. Jeśli chcemy również zobaczyć procent postępu operacji, dodajemy opcję -p.

scanimage -v -p> image.tiff

scanimage: skanowanie obrazu o rozmiarze 1284x1734 pikseli przy 24 bitach / piksel
scanimage: pozyskiwanie ramki RGB
scanimage: min / max graylevel value = 69/255
scanimage: odczytano łącznie 6679368 bajtów
Postęp: 13.8%

Co nam to da, jeśli pomożemy? Wydaje się oczywiste, pomaga przy poleceniu. Ale to polecenie ma swoją osobliwość. Na końcu ogólnej pomocy dla polecenia dodaj określone parametry, które akceptuje twój skaner.

scanimage - help

Użycie: scanimage [OPCJA] ...

BLA bla ....

Opcje specyficzne dla urządzenia `xerox_mfp: libusb: 001: 005 ':

standard:
--resolution 75 | 100 | 150 | 200 | 300 | 600dpi [150] Ustawia rozdzielczość skanowanego obrazu.
--mode Lineart | Halftone | Gray | Color [Color] Wybiera tryb skanowania (np. lineart, monochromatyczny lub kolorowy).
--highlight 30..70% (w krokach co 10) [nieaktywne] Wybierz minimalną jasność, aby uzyskać punkt bieli
--source Płaski | ADF | Auto [Płaski] Wybiera źródło skanowania (np. podajnik dokumentów).
geometria:
-l 0..215.9 mm (w krokach co 1) [0] Lewa górna pozycja x obszaru skanowania.
-t 0..297.18 mm (w krokach co 1) [0] Lewy górny róg i pozycja obszaru skanowania.
-x 0..215.9 mm (w krokach co 1) [215.9] Szerokość obszaru skanowania.
-y 0..297.18 mm (w krokach co 1) [297.18] Wysokość obszaru skanowania.

Wpisz `` scanimage --help -d URZĄDZENIE '', aby uzyskać listę wszystkich opcji dla URZĄDZENIA.

Lista dostępnych urządzeń:

xerox_mfp: libusb: 001: 005

Stąd możemy wybrać opcje z wartościami, których możemy użyć.

przykład:

Uchwała

–Rozdzielczość 150

sposób

–Mode Kolor

Teraz geometria. Jest to bardzo przydatne, ponieważ możemy nakazać skanerowi, aby wyodrębnił tylko obraz sektora (w którym umieścimy zdjęcie), a my oszczędzamy czas skanowania reszty powierzchni, którą powinniśmy również później wyciąć za pomocą edytora grafiki, jako Gimp.

-l 0 rozpoczyna skanowanie w poziomie od 0 mm od lewego górnego rogu skanera

-t 0 rozpoczyna skanowanie w pionie od 0 mm od lewego górnego rogu skanera

Zauważ, że zdecydowałem się umieścić zdjęcie w rogu skanera [współrzędne (0,0)], ponieważ jest łatwiejsze do umieszczenia. Na moim skanerze (rozmiar A4) mogę przejść od 0 do 215.9 it od 0 do 297.18.

Szerokość i wysokość zdjęcia. W moim przypadku zdjęcia mają wymiary 13x18cm:

-x 180 szerokości

-oraz 130 wysokości

Dlatego zeskanuje tylko część, w której umieściliśmy nasze zdjęcie. Oczywiście, jeśli zgodzimy się co jest lewa, prawa, szerokość, wysokość, góra i dół. Zależy to od tego, jak patrzysz na swój skaner. Proponuję przetestować współrzędne i dostosować je do swoich potrzeb.

Przykładem polecenia może być:

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Kolor --rozdzielczość 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Dzięki tym opcjom mogliśmy już zbudować nasz skrypt.

Ale przedtem…

Tiff lub pnm to nieskompresowane formaty, więc nasze zdjęcia zajmą ogromną przestrzeń dyskową. W tym miejscu pojawia się polecenie konwersji ImageMagick, które jest wyjaśnione w Jak manipulować obrazami z terminala.

Jeśli otrzymamy plik image.pnm ze skanera, możemy przekonwertować go na jpg:

konwertować obraz.pnm obraz.jpg

Ale zanim to zrobisz, kolejna sztuczka:

Obraz.pnm zajmuje dużo miejsca i powinniśmy go usunąć po pobraniu pliku image.jpg. Istnieje opcja dla polecenia convert, dzięki czemu zamiast pobierać plik z dysku, konwertuje on bezpośrednio standardowe wejście. Odbywa się to za pomocą myślnika - zamiast pliku:

konwertować - obraz.jpg

Ponieważ scanimage dostarcza zeskanowany obraz na standardowe wyjście, tworzymy „potok” i oszczędzamy czas przetwarzania potrzebny na zapisanie, a następnie usunięcie pliku image.pnm z dysku.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Kolor --rozdzielczość 150 -l 0 -t 0 -x 180 -y 130 | konwertować - obraz.jpg

Teraz tak, skrypt ...

Piszemy następujący kod w pliku, który nazwiemy scan-album.sh i udzielamy mu pozwolenia na wykonanie. Kiedy go uruchomimy, utworzy podkatalog, w którym będą znajdować się nasze zeskanowane zdjęcia. Pamiętaj o dostosowaniu wartości parametrów do swoich potrzeb.

Przeczytaj kilka sugestii po scenariuszu.

#! / bin / bash
# Dane dotyczące opcji

VERBOSE = "" # zobacz komunikat o stanie: "" nie jest; „-v” jest tak
PROGRESS = "- p" # pokaż postęp "" to nie; „-p” oznacza tak

# Następujące parametry są podane przez scanimage --help dla twojego skanera
#Urządzenie: jeśli jest tylko jeden skaner, nie jest to konieczne, należy wpisać DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = „”
MODE = "- tryb Kolor"
RESOLUTION = "- rozdzielczość 600 dpi"

#geometria, np. zdjęcie 130x180 mm
#location w lewym górnym skanerze wierzchołków

x0 = 0
y0 = 0
szerokość = 180
high = 130

#options:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ szerokość"
HIGH = "- i $ high"

# wszystkie parametry razem:

PARAMETRY = "$ DEV $ VERBOSE $ PROGRESS $ MODE $ ROZDZIELCZOŚĆ $ L $ T $ WIDTH $ HIGH"

# Nazwa albumu. Utwórz podkatalog ze swoim imieniem:

ALBUM = "Święta_1989"

# Ze względów bezpieczeństwa nic nie robię, jeśli katalog już istnieje

mkdir $ ALBUM

jeśli ["$?" = „1”]; następnie
wyjście 100
fi

# Podstawowa nazwa zdjęć (w podkatalogu)

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

function question () {
wyrzucił "----------------------------------------------- - ------------------------- "
przegapić
wyrzucił "******************************"
echo "Liczba zeskanowanych zdjęć:" "$ I"
wyrzucił "******************************"
echo -e "Naciśnij: n * n, aby wyjść * Kolejny klawisz do skanowania."
przegapić
read -s -n1 -p "Skanować nowe zdjęcie?" keypress
przegapić
}

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

# Początek

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

I = 0

pregunta

while ["$ keypress"! = "n"]; zrobić
# nowe zdjęcie do zeskanowania
niech „I + = 1”
NAZWA = $ PLIK $ I
scanimage $ PARAMETRY | konwertować - $ NAZWA.jpg
pregunta
zrobić

Sugestie

Korzystanie z wysokich rozdzielczości, takich jak te w przykładzie, znacznie spowalnia skanowanie.

Pamiętaj, że jeśli chcesz wydrukować zdjęcie na papierze, potrzebujesz około 250 punktów na cal. Jeśli idea skanowania zdjęć polega na wydrukowaniu ich w takim samym rozmiarze, jak oryginał, to wystarczy rozdzielczość 250. Wystarczy zobaczyć je na monitorze z rozdzielczością 100. Wyższa rozdzielczość posłużyłaby do powiększenia.

Stos zdjęć należy wcześniej przygotować tak, aby każde zdjęcie znajdowało się po prawej stronie. W ten sposób nie będziesz tracić czasu na umieszczanie go w skanerze, aby nie były obracane o 180º.

Podczas kalibracji pomiarów parametrów geometrii warto zwrócić uwagę, w jakiej pozycji należy umieścić oryginał, aby obrazy cyfrowe nie były „do góry nogami”. W moim przypadku dolna część zdjęcia przebiega wzdłuż osi „l”.

Jeśli masz podłączony tylko jeden skaner, nie wahaj się używać opcji -d. W skrypcie jest to DEV = »»

Czasami liczby w "xerox_mfp: libusb: 001: 003" ulegają zmianie i będziesz musiał je modyfikować za każdym razem, gdy używasz skryptu.

Podczas kopiowania skryptu uważaj na myślniki i cudzysłowy. W zależności od opcji, łączniki (znak minus) mogą być jeden lub dwa razem; cudzysłowy są podwójnymi znakami na klawiaturze, a nie tymi, które umieszczają niektóre edytory tekstu, takie jak LibreOffice.

Ze względów bezpieczeństwa skrypt nie tworzy katalogu, jeśli już istnieje, aby nie nadpisywać plików, jeśli takie istnieją. W takim przypadku to się zatrzymuje.

Jeśli album ze zdjęciami jest stary, nie żałuj, jeśli na zdjęciach brakuje włosów, zmarszczek lub kilogramów: -


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Juniorzy Calderon powiedział

    Łał! Co za dobry tuto!
    Nie sądziłem, że tak wiele rzeczy można zrobić z bash xD
    Każdego dnia uczysz się więcej!
    Dzięki za wejście!
    Nie mam skanera, ale jeśli go dostanę, od razu go wypróbuję 🙂

  2.   Wiejski prostak powiedział

    Jak dobrze ten wkład pomoże mi bardzo w digitalizacji moich notatek, mam nadzieję, że poprawi się, myślę o funkcji skanowania całego pliku i wykrywania rozmiaru skanowanego obiektu, ponieważ polegamy na magii obrazu, może być przekonwertowane na djvu lub pdf, a tym samym utworzyć pojedynczy plik. Cóż, po prostu gadałem. Bardzo dziękuję za wkład.

  3.   kocham to powiedział

    Co za wielka przyjemność, bardzo dziękuję za udostępnienie.