Что такое 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. А информацию об утилитах которые мы использовали для создания документа — на страницах соответствующего мануала.