Создаём электронные книги в формате djvu и 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
Compression image '/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 готова.

Запись опубликована в рубрике Utils с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>