Опишу здесь "щадящий" метод сканирования книг и документов, не требующий расшивания и даже механического контакта со страницами.
Пару месяцев назад мне в руки попали пара документов исторической ценности: описание архитектуры советской ЭВМ СВС-1. Папки довольно толстые и негибкие: прижать их к стеклу традиционного сканера нереально. Расшивать папки было бы варварством: всё-таки музейный экспонат. Я обзвонил фирмы, предлагающий коммерческий сервис по сканированию, но остались сомнения как в качестве результата, так и в сохранности документов. Решил городить свой огород.
Приобрёл сканер, не требующий физического контакта с объектом:
CZUR ET16 Plus. Фактически это умная 16-мегапиксельная фотокамера с подсветкой и лазерной наводкой на резкость. Притом софт работает на Маке, что для меня критично. Особенность: подключать к компьютеру надо родным USB-кабелем, иначе будут глюки.
Шаг 1: сканируем, причём для экономии сразу в чёрно-белом режиме. Титульную страницу можно в цвете. Каждая страница в максимальном разрешении образует отдельный файл типа image01234.jpg размером один-два мегабайта. Если непосредственно запихнуть их в PDF, документ в 172 страницы займёт 240 мегабайт. Это слишком расточительно, будем мудрить.
Шаг 2: преобразуем страницы в формат PNG, попутно уменьшая разрешение в два раза. Используем для этого редактор GIMP в пакетном режиме. Создаём файл ~/.gimp-2.8/scripts/batch-to-png.scm со следующим содержимым:
(define (batch-to-png infile outfile ratio)
(let* (
(image (car (gimp-file-load RUN-NONINTERACTIVE infile infile)))
(drawable (car (gimp-image-get-active-layer image)))
(cur-width (car (gimp-image-width image)))
(cur-height (car (gimp-image-height image)))
(width (* ratio cur-width))
(height (* ratio cur-height))
)
(gimp-image-scale image width height)
(gimp-convert-indexed image NO-DITHER WEB-PALETTE 256 0 0 "")
(file-png-save 1 image drawable outfile outfile 1 9 1 1 1 1 1)
(gimp-image-delete image)
)
)
После этого выполняем скрипт:
for infile in image*.jpg
do
outfile=`basename $infile .jpg`.png
gimp -i -b '(batch-to-png "'$infile'" "'$outfile'" 0.5)' -b '(gimp-quit 0)'
done
Получаем набор файлов image*.png размером примерно в 14 раз меньше исходного. Уже хороший выигрыш.
Можно бы ещё сэкономить, если умудриться убрать с изображения лишний шум. Я пытался задействовать фильтр Гаусса:
(plug-in-sel-gauss RUN-NONINTERACTIVE image drawable 5.0 178)
Не могу сказать, что доволен результатом. Хорошо бы подобрать другой фильтр, способный отфильтровать ненужные точки и штрихи, но не нарушающий качество букв текста.
Шаг 3: Преобразуем страницы в PDF.
for infile in image*.png
do
outfile=`basename $infile .png`.pdf
convert $infile $outfile
done
Шаг 4: Объединяем файлы страниц в единый PDF.
pdftk image*.pdf output document.pdf
Результат вы можете видеть здесь:
СВС-система-команд.pdf (23 мегабайта)
Для сравнения, вот версия с гауссом на втором шаге, но без уменьшения разрешения:
view (40 мегабайт)