Сканирайте фотоалбум със скрипт от командния ред

Очевидно има няколко графични интерфейси за сканиране на снимки, които предоставят множество опции. Но когато броят на снимките за сканиране е голям и нямаме скенер, който има автоматично подаващо устройство, нещата стават трудни. Като цяло трябва да направите щракване, за да сканирате, още едно щракване може би в другия край на прозореца, за да запазите ... отнема време. Както и да е, добро извинение да използвате Командна линия.

Това е принос от Рубен, като по този начин се превръща в един от победителите в нашето седмично състезание: «Споделете какво знаете за Linux«. Поздравления Рубен!

Четох статиите на Партидна обработка на изображения с GIMP y Как да манипулирам изображения от терминала, точно в деня, в който приятелят ми Хугито ме помоли за снимките (които беше загубил) от пътуване, което направихме през 1989 г. ... (4 ролки от 36 снимки! и на хартия, разбира се 🙂. Това ми напомни за този съвет да сканирам снимки, които бях забравил .

Идеята е да се използва скрипт, за да се направи възможно най-бързо:

1. - Поставете снимка на скенера
2.- Натиснете произволен клавиш, за да сканирате
3. - Повторете процедурата, освен ако натиснатият бутон не е например 'n' за изход
4. - Снимките ще бъдат запазени и номерирани в предварително създадена поддиректория.

Каква команда?

Командата 'magic' е scanimage, която е част от SANE. SANE е API, който осигурява стандартизиран достъп до всяко устройство за изображения. API на Sane е публично достояние и неговият изходен код е достъпен под общия публичен лиценз на GNU.

Инсталацията е проста. Всяка дистрибуция носи своите пакети. За Ubuntu (или неговите производни) е достатъчно да използвате synaptic и да инсталирате разумни и здравомислещи утили.

Как да използвам?

Как винаги най-добре е да пишете в терминал „man scanimage“. Ние обаче ще обобщим опциите, които ще използваме.

Отваряме терминал и стартираме scanimage -L, за да видим наличните устройства:

сканиране -L

В моя случай се връща:

устройство `xerox_mfp: libusb: 001: 005 'е многофункционално периферно устройство на SAMSUNG ORION

Това е резултатът, който ми даде с моя мултифункционален Samsung SCX-4200. Ако имате MFP и не можете да намерите устройството, уверете се, че принтерът не е активен, например с чакащ печат.

Стойността 'xerox_mfp: libusb: 001: 003' се използва за указване на командата за сканиране на изображението кое устройство да се използва чрез опцията -d. Ако е свързан само един скенер, тази опция не е необходима.

Когато сканираната команда сканира, тя изпраща полученото изображение на стандартен изход във формат pnm или tiff. Така че за сканиране пренасочваме изхода към файл. И ако искаме да видим какви съобщения дава командата, добавяме опцията -v. Ако също искаме да видим процента на напредъка на операцията, добавяме опцията -p.

scanimage -v -p> image.tiff

scanimage: сканиране на изображение с размер 1284x1734 пиксела при 24 бита / пиксел
scanimage: придобиване на RGB рамка
сканиране: минимална / максимална стойност на нивото на грайла = 69/255
scanimage: прочетете общо 6679368 байта
Напредък: 13.8%

Какво ще ни даде, ако направим сканиране –помощ? Изглежда очевидно, дава помощ за командата. Но тази команда има особеност. В края на общата помощ за командата добавете специфичните параметри, които вашият скенер приема.

scanimage --помощ

Употреба: сканиране на изображение [ОПЦИЯ] ...

Бла бла....

Опции, специфични за устройството `xerox_mfp: libusb: 001: 005 ':

стандарт:
- резолюция 75 | 100 | 150 | 200 | 300 | 600 dpi [150] Задава разделителната способност на сканираното изображение.
--mode Lineart | Полутон | Сив | Цвят [Цвят] Избира режима на сканиране (напр. Lineart, монохромен или цветен).
- подчертайте 30..70% (на стъпки от 10) [неактивен] Изберете минимална яркост, за да получите бяла точка
- източник Flatbed | ADF | Auto [Flatbed] Избира източника на сканиране (като подаващо устройство за документи).
геометрия:
-l 0..215.9 mm (на стъпки от 1) [0] Горен ляв x позиция на сканираната област.
-t 0..297.18mm (на стъпки от 1) [0] Горе вляво и позиция на сканираната област.
-x 0..215.9 mm (на стъпки от 1) [215.9] Ширина на областта на сканиране.
-y 0..297.18mm (на стъпки от 1) [297.18] Височина на сканираната област.

Въведете "scanimage --help -d УСТРОЙСТВО", за да получите списък с всички опции за УСТРОЙСТВО.

Списък на наличните устройства:

xerox_mfp: libusb: 001: 005

Оттук можем да избираме опциите със стойностите, които можем да използваме.

Пример:

резолюция

–Резолюция 150

Modo

–Цвят на режима

Сега геометрията. Това е много полезно, защото можем да кажем на скенера да извлече само изображението на сектор (където ще поставим снимката) и спестяваме времето за сканиране на останалата част от повърхността, което също трябва да изрежем по-късно с графичен редактор като Gimp .

-l 0 започва да сканира хоризонтално от 0 mm от горния ляв ъгъл на скенера

-t 0 започва сканиране вертикално от 0 mm от горния ляв ъгъл на скенера

Имайте предвид, че избрах да поставя снимката в ъгъла на скенера [координати (0,0)], тъй като е по-лесно да се постави. На моя скенер (размер A4) l мога да премина от 0 до 215.9 и t от 0 до 297.18.

Ширина и височина на снимката. В моя случай снимките са 13x18cm:

-х 180 широки

-и 130 високи

Следователно той ще сканира само частта, в която поставяме нашата снимка. Разбира се, ако се съгласим кое е лявото, дясното, ширината, височината, горната и долната част. Това ще зависи от това как гледате на скенера си. Предлагам да тествате координатите и да ги съобразите с вашите нужди.

Пример за командата може да бъде:

scanimage -d xerox_mfp: libusb: 001: 003 -p - режим Цвят - резолюция 150 -l 0 -t 0 -x 180 -y 130> image.pnm

С тези опции вече бихме могли да изградим нашия скрипт.

Но преди…

Tiff или pnm са некомпресирани формати, така че нашите снимки ще заемат огромно дисково пространство. Тук идва командата за преобразуване ImageMagick, която е обяснена в Как да се манипулират изображения от терминала.

Ако получим image.pnm от скенера, можем да го преобразуваме в jpg:

конвертирате image.pnm image.jpg

Но преди да направите това, още един трик:

Image.pnm заема много място и трябва да го изтрием, след като получим image.jpg. Има опция за командата convert, така че вместо да вземе файл от диск, той директно да преобразува стандартния вход. Това се постига с тире - вместо с файла:

конвертиране - image.jpg

Тъй като scanimage доставя сканираното изображение на стандартен изход, ние правим „конвейер“ и спестяваме времето за обработка, необходимо за запис и след това изтриваме файла image.pnm от диска.

scanimage -d xerox_mfp: libusb: 001: 003 -p - режим Цвят --резолюция 150 -l 0 -t 0 -x 180 -y 130 | конвертиране - image.jpg

Сега да, сценарият ...

Записваме следния код във файл, който ще наречем scan-album.sh и му даваме разрешение за изпълнение. Когато го стартираме, той ще създаде поддиректория, където ще бъдат нашите сканирани снимки. Не забравяйте да промените стойностите на параметрите според вашите нужди.

Не забравяйте да прочетете някои предложения след скрипта.

#! / Хамбар / Баш
# Данни за опции

VERBOSE = "" # виж съобщение за състоянието: "" не е; "-v" е да
PROGRESS = "- p" # покажи напредъка "" е не; "-p" е да

# Следните параметри са дадени от scanimage --help за вашия скенер
# Устройство: Ако има само един скенер, не е необходимо, поставете DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
РЕЖИМ = "- режим Цвят"
РЕЗОЛЮЦИЯ = "- резолюция 600 dpi"

#geometry, например 130x180 mm снимка
#location в горния ляв скенер на връх

x0 = 0
y0 = 0
ширина = 180
високо = 130

#настроики:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ широчина"
HIGH = "- и $ високо"

# всички параметри заедно:

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

# Име на албума. Създайте поддиректория с вашето име:

АЛБУМ = "Празници_1989"

# От съображения за сигурност не правя нищо, ако директорията вече съществува

mkdir $ АЛБУМ

ако ["$?" = "1"]; тогава
изход 100
fi

# Основно име за снимки (в поддир.)

ФАЙЛ = "./" $ ALBUM "/" $ ALBUM "_foto_"

функция въпрос () {
изхвърли "------------------------------------------------ ------------------------- "
ехо
изхвърли "******************************"
echo "Брой сканирани снимки:" "$ I"
изхвърли "******************************"
echo -e "Натиснете: n * n, за да излезете * Друг бутон за сканиране."
ехо
read -s -n1 -p "Сканиране на нова снимка?" натискане на клавиш
ехо
}

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

# Старт

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

I = 0

pregunta

while ["$ keypress"! = "n"]; направете
# нова снимка за сканиране
нека "I + = 1"
ИМЕ = $ FILE $ I
scanimage $ ПАРАМЕТРИ | конвертиране - $ NAME.jpg
pregunta
направен

Предложения

Използването на високи разделителни способности като тази в примера прави сканирането много по-бавно.

Имайте предвид, че ако искате да отпечатате снимка на хартия, имате нужда от около 250 точки на инч. Ако идеята за сканиране на снимките е да ги отпечатате в същия размер като оригинала, е достатъчна разделителна способност 250. За да ги видите на монитор, е достатъчно 100. По-висока резолюция би послужила за увеличение.

Стекът от снимки трябва да бъде подготвен предварително, така че всяка снимка да е от дясната страна. По този начин няма да губите време, като го поставяте в скенера, за да не се завъртят на 180º.

При калибриране на измерванията на геометричните параметри е препоръчително да се наблюдава в коя позиция трябва да се постави оригиналът, така че цифровите изображения да не са „обърнати надолу“. В моя случай долната част на снимката минава по оста 'l'.

Ако имате само един свързан скенер, не се колебайте да използвате опцията -d. В скрипта е DEV = »»

Понякога числата в "xerox_mfp: libusb: 001: 003" се променят и ще трябва да го променяте всеки път, когато използвате скрипта.

Внимавайте за тирета и кавички, когато копирате скрипта. Тиретата (знакът минус) могат да бъдат едно или две заедно в зависимост от опцията; кавичките са двойни на клавиатурата, те не са тези, които някои текстови процесори като LibreOffice поставят.

От съображения за сигурност скриптът не създава директорията, ако тя вече съществува, за да не презаписва файлове, ако има такива. В такъв случай спира.

Ако фотоалбумът е стар, не съжалявайте, ако изображенията изобилстват от коса, бръчки или килограми липсват: -


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Юноши Калдерон каза той

    Еха! Какво добро tuto!
    Не мислех, че толкова много неща могат да се направят с bash xD
    Всеки ден научавате повече!
    Благодаря за приноса!
    Нямам сканер, но ако го взема, веднага ще го пробвам 🙂

  2.   наивник каза той

    Колко добре този принос ще ми помогне много при дигитализацията на бележките ми, надявам се да се подобри, мисля за функция, която да сканира пълен файл и да открие размера на сканирания обект, тъй като зависим от магията на изображението, той може да бъде конвертиран в djvu или pdf и по този начин създайте един файл. Ами просто се разхождах. Благодаря ви много за приноса.

  3.   Адо Ело каза той

    Какво голямо удоволствие, благодаря ви много за споделянето.