Создаём электронные книги в формате djvu и pdf

пример конвертирования в серый pdf для чтения convert -alpha off -colorspace gray -colors 10 -resize 800 лист* scan_grey.pdf Оригинал статьи: http://bacher09.org/2011/10/creating-ebook-in-djvu-or-pdf/


Есть отсканированные документы и из них надо собрать djvu или pdf книгу. Для того чтобы их превратить в pdf документ можно воспользоваться ImageMagick (илиGraphicsMagick).
Простой пример создания pdf документа:
$ convert *.jpg book.pdf
В GrapicsMagick эта команда может выглядеть так:
$ gm convert *.jpg book.pdf
Вместо *.jpg можно использовать другой формат или список файлов. Список файлов удобнее использовать для того, чтобы задать порядок следования страниц в файле.
Например:
$ convert file1.jpg file2.png file3.gif book.pdf
или
$ convert $( ls | egrep '(png|gif|pnm|pbm|pgm|jpg|jpeg)$' | sort -n) book.pdf

В этом примере sort -n используется для изменения порядка следования страниц.
Файл который получается может оказаться слишком большим. Чтобы уменьшить его можно воспользоваться алгоритмами сжатия которые поддерживают pdf документы.
Список алгоритмов сжатия приведён ниже в таблице:
Алгоритмы сжатия pdf
Compressionimage '/Filter [ ... ]' setting
-compress none'/ASCII85Decode'
-compress zip'/FlateDecode'
-compress jpeg'/DCTDecode'
-compress lzw'/LZWDecode'
-alpha off -monochrome -compress fax'/CCITTFaxDecode'
+compress
-compress rle
'/RunLengthDecode'
Zip — это алгоритм сжатия без потерь. Есть смысл его использовать только если исходное изображение в формате tiff,pbm,pnm,pgm или аналогичном. Наибольшего результата сжатия можно добиться используя алгоритм сжатия с потерями jpeg. При сжатии с потерями для указания качества в процентах используется опция -quality. Например:
$ convert -compress jpeg -quality 60 *.jpg book.pdf
Также можно использовать опцию -monochrome для создания чёрно-белых документов, что уменьшит размер выходного файла. Алгоритм сжатия fax можно использовать только с чёрно-белыми изображениями. Также чтобы уменьшить размер файла можно изменить разрешение c помощью опции -resize.
Теперь попробуем создать djvu файл. Для этого сначала надо преобразовать изображения в формат ppm,pgm или pbm. Pnm — используется для цветных изображений, pgm — чёрно-белые с градациями серого, а pbm чёрно-белый без градаций серого (есть только чёрный и белый). Формат pnm может представлять файлы в форматах ppm,pgm и pbm. Естественно, если использовать изображения в формате pbm то выходной djvu файл будет меньше. Сначала конвертируем все изображения в формат pnm. Для этого можно воспользоваться ImageMagick или утилитой anytopnm. Конвертировать одно изображение можно так:
$ convert image.jpg image.ppm
или
$ anytopnm image.jpg > image.ppm
Все файлы можно конвертировать таким образом:
$ for name in $(ls | egrep 'png|jpg|gif') ; do convert $name $(echo $name | sed -r 's/(.*)\.[^\.]+/\1/').ppm ; done
После того, как изображения конвертированы в ppm те, которые не содержат цветов можно конвертировать в pgm c помощью ppmtopgm.
$ ppmtopgm file1.ppm > file1.pgm
Это тоже можно сделать в цикле.
Теперь pgm изображения можно преобразовать в pbm с помощью pgmtopbm.
Например:
$ pgmtopbm -threshold -value 0.6 file1.pgm > file1.pbm
Опция -threshold задаёт алгоритм преобразования, а -value число переход от белого к чёрному.
Чем выше -value тем чернее будет изображение.
После этого все файлы ppm, pgm, pbm переименовываем в pnm, так как там будет проще сними работать.
Далее превращаем каждое изображение в формат djvu. Для этого используем с44.
$ c44 -slice 82 file.pnm file.djvu 
Или всё сразу:
$ for name in $(ls | grep 'pnm') ; do c44 $name -slice 82 $(echo $name | sed -r 's/(.*)\.[^\.]+/\1/').djvu ; done
Опция -slice влияет на выходной размер файла, детальнее опции утилиты с44 смотрите на сайте разработчика.
Теперь осталось только объединить все djvu файлы в один.
$ djvm book.djvu page1.djvu page2.djvu page3.djvu pageN.djvu
Всё теперь требуемая книга в формате djvu готова.