Создание документов DJVU в Linux

Что такое DjVu?

DjVu — это формат хранения изображений высокого разрешения. В его основе лежит алгоритм сжатия с использованием вейвлет-анализа. Из-за возможности хорошего сжатия изображения при котором текст остается читаемым у DjVu нет конкурентов для хранения отсканированных текстовых документов или фотографий.

Разновидности формата

Для работы с одностраничными или многостраничными документами, черно-белыми или цветными изображениями, Фото и картинками высокого разрешения DjVu объединяет в себе три формата сжатия: DjVuText, DjVuPhoto, и DjVuLayered.

DjVuText (Также известный как JB2): формат сжатия черно-белых и однотоновых изображений. Используемый здесь алгоритм дает высокую степень сжатия за счет обработки специальным способом элементов одинаковой формы (например букв) на странице. Черно-белые многостраничные документы разрешением 300dpi (12 точек на миллиметр) содержащие только текст обычно сжимаются до размера в 5–20 KB. Файлы обработанные DjVuText получаются в 3–10 раз меньшего размера, чем файлы PDF или TIFF того же качества. DjVuText также поддерживает режим при котором с каждым объектом может быть связан определенный цвет. Этот режим можно использовать для электронных документов или для изображений формата GIF.

DjVuPhoto (известный как IW44): передовой формат сжатия для цветных и grayscale (оттенки серого) фотографий, рисунков и других изображений. Он основан на математической теории вейвлетов. Размер сжатого файла выходит в среднем в два раза меньше чем файла JPEG того же качества. Основными преимуществами DjVuPhoto перед JPEG являются:

  • Меньший размер файла (примерно в два раза меньше чем JPEG того же качества). Кроме того, при больших коэффициентах сжатия не появляются отвратительные артефакты как у JPEG.
  • Быстрота: картинка на экране появляется очень быстро, а четкость изображения увеличивается по мере его декодирования.
  • Масштабирование с декомпрессией на лету. Это полезно при просмотре очень больших изображений на компьютере с ограниченным объемом оперативной памяти. При этом изображение остается частично сжатым. Изображения 4000×4000 пикселов могут быть просмотрены на компьютере с 32 мегабайтами оперативной памяти без участия раздела подкачки (свопа).

Формат позволяет работать с очень большими изображениями, но максимальный размер изображения ограничен размером оперативной памяти компьютера. Еще одно ограничение DjVuPhoto — формат поддерживает только одну цветовую схему (YCrCb). Это ограничение может вызвать проблемы при работе с медицинскими или геологическими изображениями. Для таких целей больше подходит формат от LizardTech — MrSID.

DjVuLayered (или просто DjVu): применяется для сжатия отсканированных черно-белых или grayscale-изображений содержащих текст вперемешку с картинками и фоновыми рисунками. Примером таких документов могут быть: газеты, рекламные каталоги, комиксы… DjVu добивается большого коэффициента сжатия разделением изображения на несколько слоев и сжатием каждого слоя наиболее подходящим для него способом. Обычно документ разделяется на 2 или 3 слоя. Слой с фоновым изображением сжимается DjVuPhoto, маска (слой содержащий текст и простые рисунки) сжимается DjVuText. Цвет текста и рисунков может быть сохранен двумя способами: с использованием цветового режима DjVuText или как отдельный слой для DjVyPhoto. Маска сохраняется в полном разрешении чтобы сохранить начертание символов без изменения, а фоновый слой — в меньшем разрешении, потому что для нормального вида документа этого вполне достаточно. Благодаря этой технике удается достичь высокого коэффициента сжатия. Размер файла с отсканированным в разрешении 300dpi изображением одной страницы журнала обычно равен 40–100KB.

Документ DjVu может содержать как одну так и множество страниц. многостраничные документы бывают двух видов: связанные (bundled) — хранящиеся в одном файле и ‘indirect’ — когда отдельные страницы документа хранятся в отдельных файлах в одной директории.

Замечание: многостраничные документы, собранные при помощи программного обеспечения DjVu версий 2.x и 3.x несовместимы. Плагины версий 3.x корректно отображают многостраничные документы версии 2.x, DjVuShop 2.0 работает только с многостраничными документами версии 2.0

Каждое изображение в формате DjVu может содержать дополнительную информацию о разрешении картинки, гиперссылках, подсвечиваемых областях, цвете рамки изображения, режиме показа и параметрах масштабирования. Еще документ DjVu может содержать в специальном сжатом формате текст находящийся на изображении (например, полученный программой распознавания текста OCR). Этот текст используется для поиска по странице и выделения отдельных слов/выражений.

Применение DjVu

Краткий ответ на вопрос «когда я должен использовать DjVu?» таков:

  • Для хранения изображений разрешением более 1 миллиона пикселей (отсканированные документы, фотографии высокой четкости).
  • Для хранения любых изображений содержащих текст.
  • Для хранения многостраничных документов: отсканированные книги, фотоальбомы и т.п.

Преимущества DjVu

  • Значительно меньший размер файла (по крайней мере в два раза меньший чем у изображения JPEG того же разрешения или в 3-10 раз меньший чем у PDF).
  • Возможность текстового поиска (если текстовая информация была добавлена при создании документа) в отличие от JPEG
  • Меньшее потребление памяти при просмотре изображений большого разрешения благодаря возможности частичной декомпрессии в отличие от файлов Jpeg
  • Отсутствие возможных проблем со шрифтами как у PDF и PostScript.
  • Меньшее время отрисовки изображения на экране при начале просмотра или при масштабировании (по сравнению с PDF и PostScript)
  • Простой и легкий просмотрщик (плагин для просмотра DjVu — 600KB; Acrobat Reader — 6MB)

Собираем DjVu-документ

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

\$ sudo apt-get install netpbm djvulibre-bin

Теперь можно приступать собственно к созданию DjVu-документа. Допустим у нас есть отсканированная книга — файлы 010…BMP и обложка — 010.BMP.

Первым делом сконвертируем все изображения в формат ‘portable anymap‘. Сделать это можно командой bmptopnm, перенаправив ее вывод в файл с нужным названием. Для других форматов файлов есть команды jpegtopnm, pngtopnm, giftopnm или anytopnm. Чтобы не вводить одну и ту же команду для каждого файла, напишем небольшой цикл, как учились в статье про bash:

\$ for i in 010*BMP; do bmptopnm \$i > \${i%BMP}pnm; done bmptopnm: Windows BMP, 2480x3507x1 bmptopnm: WRITING PBM IMAGE bmptopnm: Windows BMP, 2480x3507x8 bmptopnm: WRITING PGM IMAGE ....................

После этого в текущей директории появятся файлы с расширениями .pnm и именами как и у BMP-шек.

Черно-белые изображения

Для преобразования черно-белых изображений будем использовать команду cjb2. У этой команды два аргумента — файл ‘portable anymap’ и название желаемого djvu-файла. А также есть несколько опций: -dpi — разрешение картинки, -losslevel <число> — степень сжатия. Есть также несколько сокращений для удобства:

  • -lossless эквивалентно -losslevel 0 — вообще не сжимать (это опция по умолчанию)
  • -clean эквивалентно -losslevel 1 — удаление самых мелких помарок с изображения
  • -lossy эквивалентно -losslevel 100 — включает возможность кодировать некоторые похожие символы одинаково.

Возможны и большие значения losslevel, но это приведет к ухудшению качества изображения.

Итак, обрабатываем изображения опять в цикле:

\$ for i in 010*pnm; do cjb2 -dpi 300 -clean \$i \${i%pnm}djvu; done

После этой операции в рабочей директории появятся файлы с расширением .djvu

Цветные изображения

Для сжатия цветных изображений будем использовать утилиту с44. Цветная у меня только обложка. У команды c44 опций побольше, чем у предыдущей, но я буду использовать только две из них: разрешение и ‘-slice’ для контроля качества сжатия. В мануале для фотографий рекомендуется значение -slice 74+13+10, но я возьму немного меньшие значения — для четырехцветной обложки будет нормально. (за подробной информацией о параметрах — смотри справку man c44).

\$ c44 -dpi 300 -slice 60+7+7 01.pnm 01.djvu

Собираем многостраничный документ

Теперь, когда мы обработали каждую страницу, можем собрать их все в один документ. Делается это так:

\$ djvm -c my-cool-book.djvu 01.djvu 010*djvu

Опция -c (‘create’) указывает что мы хотим сделать новый документ. Далее идет название, которое мы хотим дать нашей книге, а после — файлы ‘.djvu’ из которых книга будет состоять. Важно чтобы имена файлов были в алфавитном порядке если мы используем globbing (подстановку шаблона * вместо части имени файла), тогда страницы в книге будут идти по-порядку

Чем смотреть DjVu-документы?

Самые популярные просмотрщики DjVu-файлов: djview4, evince, okular.

Дополнительная информация

Подробную информацию о формате DjVu можно получить на сайте DjVu.org. Там же можно скачать программное обеспечение для просмотра файлов DjVu. А информацию об утилитах которые мы использовали для создания документа — на страницах соответствующего мануала.