Сканирование фотоальбома скриптом из командной строки

Ясно, что есть несколько графические интерфейсы для сканирования фотографий, которые предоставляют множество вариантов. Но когда количество фотографий для сканирования велико и у нас нет сканера с автоматическим устройством подачи листов, все становится сложно. В общем, вам нужно сделать щелчок для сканирования, еще один щелчок, возможно, в другом конце окна, чтобы сохранить ... это требует времени. В любом случае, хороший повод использовать Командная строка.

Это вклад Рубена, который стал одним из победителей нашего еженедельного конкурса: «Поделитесь своими знаниями о Linux«. Поздравляю Рубен!

Я читал статьи о Пакетная обработка изображений с помощью GIMP y Как управлять изображениями с терминала, как раз в тот день, когда мой друг Угуито попросил у меня фотографии (которые он потерял) нашей поездки в 1989 году… (4 рулона по 36 фотографий! и, конечно, на бумаге 🙂. Это напомнило мне этот совет для сканирования фотографии, которые я забыл.

Идея состоит в том, чтобы сделать это как можно быстрее с помощью скрипта:

1.- Поместите фото на сканер
2.- Нажмите любую клавишу для сканирования
3.- Повторите процедуру, если нажатая клавиша не является, например, «n» для выхода.
4.- Фотографии будут сохранены и пронумерованы в предварительно созданном подкаталоге.

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

«Волшебная» команда - это scanimage, которая является частью SANE. SANE - это API, обеспечивающий стандартизированный доступ к любому устройству обработки изображений. Sane API находится в общественном достоянии, а его исходный код доступен под Стандартной общественной лицензией GNU.

Установка проста. Каждый дистрибутив приносит свои пакеты. Для Ubuntu (или его производных) достаточно использовать synaptic и установить sane и sane-utils.

Как пользоваться?

Как всегда лучше всего писать в терминале «man scanimage». Однако мы резюмируем варианты, которые мы будем использовать.

Мы открываем терминал и запускаем scanimage -L, чтобы увидеть доступные устройства:

сканизображение -L

В моем случае возвращается:

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

Это результат, который он дал мне с моим многофункциональным устройством Samsung SCX-4200. Если у вас есть МФУ, и вы не можете найти устройство, убедитесь, что принтер не активен, например, если печать находится в очереди.

Значение 'xerox_mfp: libusb: 001: 003' используется для указания команде scanimage, какое устройство использовать, с помощью параметра -d. Если подключен только один сканер, в этой опции нет необходимости.

Когда команда scanimage сканирует, она отправляет полученное изображение на стандартный вывод в формате pnm или tiff. Поэтому для сканирования мы перенаправляем вывод в файл. И если мы хотим видеть, какие сообщения выдает команда, мы добавляем параметр -v. Если мы также хотим видеть процент выполнения операции, мы добавляем параметр -p.

scanimage -v -p> изображение.tiff

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

Что это даст нам, если мы отсканируем изображение –help? Кажется очевидным, дает подсказку по команде. Но у этой команды есть особенность. В конце общей справки по команде добавьте конкретные параметры, которые принимает ваш сканер.

сканизображение --help

Использование: scanimage [ОПЦИЯ] ...

БЛА бла ....

Параметры, относящиеся к устройству `xerox_mfp: libusb: 001: 005 ':

стандарт:
--resolution 75 | 100 | 150 | 200 | 300 | 600dpi [150] Устанавливает разрешение отсканированного изображения.
--mode Lineart | Halftone | Gray | Color [Color] Выбирает режим сканирования (например, штриховой, монохромный или цветной).
--highlight 30..70% (с шагом 10) [неактивно] Выберите минимальную яркость, чтобы получить точку белого
--source Flatbed | ADF | Auto [Flatbed] Выбирает источник сканирования (например, устройство подачи документов).
Геометрия:
-l 0..215.9 мм (с шагом 1) [0] Верхнее левое положение x области сканирования.
-t 0..297.18 мм (с шагом 1) [0] Слева вверху и положение области сканирования.
-x 0..215.9 мм (с шагом 1) [215.9] Ширина области сканирования.
-y 0..297.18 мм (с шагом 1) [297.18] Высота области сканирования.

Введите scanimage --help -d DEVICE, чтобы получить список всех опций для DEVICE.

Список доступных устройств:

xerox_mfp: libusb: 001: 005

Отсюда мы можем выбрать варианты со значениями, которые мы можем использовать.

пример:

Разрешение

–Разрешение 150

Режим

–Mode Color

Теперь о геометрии. Это очень полезно, потому что мы можем указать сканеру извлекать только изображение сектора (куда мы поместим фотографию), и мы экономим время на сканирование остальной поверхности, которую мы также должны вырезать позже с помощью графического редактора, такого как как GIMP.

-l 0 запускает сканирование по горизонтали с 0 мм от левого верхнего угла сканера

-t 0 начинает сканирование по вертикали с 0 мм от левого верхнего угла сканера

Обратите внимание, что я решил разместить фотографию в углу сканера [координаты (0,0)], так как ее легче разместить. На моем сканере (размер A4) l может изменяться от 0 до 215.9 и t от 0 до 297.18.

Ширина и высота фотографии. В моем случае фотографии 13x18см:

-x 180 в ширину

-и 130 высотой

Поэтому он будет сканировать только ту часть, куда мы поместили нашу фотографию. Конечно, если мы договоримся о том, что такое левое, правое, ширина, высота, верх и низ. Это будет зависеть от того, как вы смотрите на свой сканер. Предлагаю проверить координаты и скорректировать их под свои нужды.

Примером команды может быть:

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Color --resolution 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 есть опция, позволяющая не брать файл с диска, а напрямую преобразовывать стандартный ввод. Это делается с помощью тире - вместо файла:

convert - image.jpg

Поскольку scanimage выводит отсканированное изображение на стандартный вывод, мы создаем «конвейер» и экономим время обработки, необходимое для записи, а затем удаления файла image.pnm с диска.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Color --resolution 150 -l 0 -t 0 -x 180 -y 130 | convert - image.jpg

Теперь да, сценарий ...

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

Обязательно прочтите несколько предложений после сценария.

#! / Bin / Баш
# Данные для опций

VERBOSE = "" # см. Сообщение о состоянии: "" не; "-v" - да
PROGRESS = "- p" # показать прогресс "" нет; "-p" - это да

# Следующие параметры предоставляются scanimage --help для вашего сканера
# Устройство: если сканер только один, в этом нет необходимости, укажите DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- цвет режима"
RESOLUTION = "- разрешение 600dpi"

# геометрия, например фото 130x180 мм
# расположение в верхнем левом вершинном сканере

х0 = 0
у0 = 0
ширина = 180
высокий = 130

#параметры:

L = "- l $ x0"
T = "- t $ y0"
WIDTH = "- x $ ширина"
HIGH = "- и $ high"

# все параметры вместе:

ПАРАМЕТРЫ = "$ DEV $ VERBOSE $ PROGRESS $ MODE $ RESOLUTION $ L $ T $ WIDTH $ HIGH"

# Название альбома. Создайте подкаталог со своим именем:

ALBUM = "Праздники_1989"

# В целях безопасности ничего не делаю, если каталог уже существует

mkdir $ АЛЬБОМ

если ["$?" = "1"]; тогда
выйти из 100
fi

# Базовое имя для фотографий (в подкаталоге)

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

function question () {
выбросил "------------------------------------------------ ------------------------- "
эхо
выбросил "******************************"
echo "Кол-во отсканированных фотографий:" "$ I"
выбросил "******************************"
echo -e "Нажмите: n * n для выхода * Другая клавиша для сканирования."
эхо
read -s -n1 -p "Сканировать новую фотографию?" нажатие клавиши
эхо
}

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

# Начало

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

I = 0

вопрос

в то время как ["$ keypress"! = "n"]; делать
# новое фото для сканирования
пусть "I + = 1"
ИМЯ = $ FILE $ I
scanimage $ ПАРАМЕТРЫ | convert - $ NAME.jpg
вопрос
сделанный

Предложения

Использование высокого разрешения, такого как в примере, значительно замедляет сканирование.

Имейте в виду, что если вы хотите напечатать фотографию на бумаге, вам понадобится около 250 точек на дюйм. Если идея сканирования фотографий состоит в том, чтобы напечатать их того же размера, что и оригинал, достаточно разрешения 250. Чтобы увидеть их на мониторе, достаточно 100. Более высокое разрешение послужит для увеличения.

Стопку фотографий нужно подготовить заранее, чтобы каждая фотография была на правой стороне. Таким образом, вы не будете терять время, вставляя его в сканер, чтобы они не поворачивались на 180 °.

При калибровке измерений геометрических параметров рекомендуется следить за тем, в каком положении должен быть размещен оригинал, чтобы цифровые изображения не были «перевернутыми». В моем случае нижняя часть фото идет по оси l.

Если у вас подключен только один сканер, не используйте параметр -d. В скрипте это DEV = »»

Иногда числа в "xerox_mfp: libusb: 001: 003" меняются, и вам придется изменять его каждый раз, когда вы используете сценарий.

Следите за дефисами и кавычками при копировании сценария. Дефис (знак минус) может быть один или два вместе в зависимости от параметра; кавычки - это двойная клавиатура, это не те, которые используются в некоторых текстовых процессорах, таких как LibreOffice.

В целях безопасности сценарий не создает каталог, если он уже существует, чтобы не перезаписывать файлы, если они есть. В этом случае он останавливается.

Если фотоальбом старый, не жалейте, если на снимках густые волосы, отсутствуют морщинки или килограммы: -


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

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

  1.   Хуниорс Кальдерон сказал

    Вот Это Да! Какой хороший балет!
    Я не думал, что с bash xD можно сделать так много всего.
    Каждый день узнаешь больше!
    Спасибо за вклад!
    У меня нет Сканера, но если он у меня появится, я сразу попробую

  2.   Деревенщина сказал

    Насколько хорошо этот вклад поможет мне в оцифровке моих заметок, я надеюсь, что он улучшится, я думаю о функции для сканирования всего файла и определения размера отсканированного объекта, поскольку мы зависим от магии изображений, это может быть преобразованным в djvu или pdf и таким образом создать единый файл. Ну, я просто продолжал болтать. Большое спасибо за ваш вклад.

  3.   Адо Элло сказал

    Какое большое удовольствие, большое спасибо за то, что поделились.