О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

05.09.2008

Формат DjVu

1999 г

Вступление: эта заметка была написана лет 5 назад, части ее вошли в мои книги "Как создаются сайты" и "Офис, web, графика в Linux". Обе успели стать библиографической редкостью, а формат за это время несколько гальванизировался, став свободным (http://djvulibre.djvuzone.org/). Поэтому я и решил разместить свои тогдашние соображения, хотя описание инструментария утратило актуальность - проприетарный djvu-инструментарий практически прекратил развитие, зато появились инструменты свободные. О которых со временем также планирую написать.

Формат со столь завлекательным названием был придуман фирмой AT&T (см. http://www.djvu.com). И по замыслу предназначался для сканированных изображений, совмещающих полноцветную графику и текст, для которого требовалась читабельность.

За почти два года жизни djvu весьма развился и ныне вполне пригоден для представления в Сети. Хотя широкого распространения там не получил, на мой взгляд - незаслуженно.

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

Что такое DjVU

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

  • адекватная передача полноцветной графики;
  • сохранение удобочитаемости текста;
  • достаточная компактность.

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

Плюс к этому, DjVU обладает почти уникальной для Интернет-графики особенностью - способностью к масштабированию. А не так давно он оброс и еще некоторыми дополнительными усовершенствованиями. На его основе стало возможно создание навигационных карт (image map) и многостраничных документов.

Это и делает формат DjVU пригодным для решения многих задач, возникающих при представлении в Интернет графических материалов. А в ряде случаев он оказывается просто незаменимым. И, не смотря на это, распространенность его в Интернете не идет ни в какое сравнение не только с традиционными Сетевыми графическими форматами (такими, как JPEG и GIF), но и даже с Macromedia Shockwave - также относительно новым векторным форматом Интернет-графики, претендующем на роль нового стандарта.

Однако Macromedia Shockwave - формат фирменный (то есть принадлежит фирме Macromedia, http://www.macromedia.com) и, до недавнего времени, закрытый. Хотя ныне положение изменилось, однако открытого и бесплатного инструментария для работы с Shockwave по сию пору, насколько мне известно, нет - требуется инструментарий фирменный, и далеко не бесплатный.

Формат DjVu, напротив, является открытым со дня своего создания. Спецификация его описана на сайте AT&T (http://www.djvu.com). Там же доступен и полный набор инструментов для работы с этим форматом. Не только бесплатно для некоммерческого использования, но и с исходными текстами для существенной части программных модулей.

Чем его делать

Инструментарий DjVu, разработанный фирмой AT&T (DjVu SDK) существует для целого ряда платформ: Windows 9x/NT, Irix SGI, Sun Solaris, HP PA, Linux i386. Кроме того, для Windows 9x/NT существуют инструменты от сторонних производителей - например, фирмы Feith (http://www.feith.com). Разумеется, версии для разных платформ имеют свои особенности. Так, Windows-инструментарий функционирует, естественно, в графическом режиме, большинство Linux-программ - в режиме командной строки. Все сказанное ниже относится, естественно, к Linux-версиям.

DjVu SDK для Linux включает три пакета различного назначения: djvu, djedit и djvumulti. Все они имеют статус бета-версий (первые два пакета - 2.0.х, третий 3.0) и представлены реализациями как для glibc5, так и glibc6. Доступны на сайте AT&T (http://www.djvu.com) в виде архивов tar.gz размером 1,9, 1,2 и 2,5 Мбайт, соответственно. Для скачивания требуется регистрация, процедура которой в последнее время существенно упростилась. Хотя само скачивание, по прежнему, происходит медленно и печально.

Инсталляция всех трех пакетов происходит абсолютно одинаково и подробно описана в прилагаемых README-файлах. После распаковки каждого архива в промежуточный каталог запускается (в терминальном или консольном режиме) инсталляционный скрипт (install.sh). Который для начала предлагает ознакомиться с условиями лицензионного соглашения. При согласии с ними - следует собственно инсталляция. Предлагается ввести пути для размещения исполнимых файлов, библиотек, документации и прочего (для пакета djvu - еще и исходных текстов). По умолчанию предполагается инсталляция в подкаталоги каталога /usr (/usr/bin, /usr/lib, /usr/man) - достаточно просто нажимать клавишу Enter. То есть осуществлять ее следует в режиме администратора. Однако не исключается и пользовательская инсталляция - для этого, соответственно, каталоги следует определить внутри своей пользовательской директории.

Инсталлировав пакеты, можно посмотреть, для чего же они предназначены. Пакет djvu включает два основных компонента - djvuencode и djvudecode. Первый, как и следует ожидать, предназначен для преобразования растровых графических файлов (в форматах TIFF, BMP, JPEG, GIF и еще нескольких) в формат DjVu. Второй - для обратной процедуры. Пакет djedit позволяет создавать на DjVu-изображениях активные области с привязанными к ним гиперссылками (на html- или djvu-файлы); кроме того, он включает автономный модуль просмотра DjVu-изображений - djview и средства создания многостраничных DjVu-документов версии 2.0 - djvuindex и djvupack. В пакете djvumulti предусмотрены средства создания многостраничных DjVu-документов версии 3.0 - djvujoin и djvubundle, а также конвертации версии 2 в версию 3 - djvureindex.

Все компоненты трех пакетов работают в консольном или терминальном режиме, за исключением графических модулей djedit и djview.

Как его делать

Процесс создания DjVu-документа проходит в несколько этапов. Сначала, естественно, следует изготовить собственно DjVu-изображения. Для чего, как уже говорилось, используется команда

$ djvuencode [options] исходный_файл.* целевой_файл.djvu

или

$ djvuencode [options] файл1 ... файл# целевой_каталог

Список опций можно получить, набрав в командной строке

$ djvuencode -h

Их довольно много, но наиболее существенны - две: -p или -photo для фотореалистического режима и -d или -dpi для режима документа.

Фотореалистический режим является режимом по умолчанию, при отсутствии явного указания каких-либо опций. Он предназначен для обработки оригинальных изображений и обеспечивает оптимальное соотношение качества и размера.

Режим документа предназначен для обработки сканированных изображений, совмещенных с текстом. Он требует еще одного параметра - разрешения (N). Каковых можно выбрать три - 100, 200 или 300 (что представляет собой указание на разрешение в dpi).

Во избежание недоразумений, следует сказать, что под разрешением в данном случае подразумевается нечто прямо противоположное общепринятому. А именно - разрешение, с которым сканировался исходный документ. Поскольку именно в соответствие с этим осуществляется его преобразование. То есть, чем ниже исходное разрешение сканирования, тем больше программа пытается улучшить изображение. В результате для любого экранного изображения: при N, равном 100, мы имеем максимальный размер файла и наилучшее качество, а при 300 - наоборот, минимальный файл и низкое качество. Что понятно: ведь экранное изображение имеет разрешение заведомо не выше 85 dpi (обычно - меньше).

Если команда djvuencode дана без опций - по умолчанию выбирается фоторежим. Нужно сказать, что в этом случае для экранных растровых изображений, по сравнению с режимом документа, достигается более высокое качество (при размере файла в полтора-два раза меньше).

Полученное DjVu-изображение не может быть вставлено в html-документ посредством тэга img. Однако его можно вызвать с html-страницы с помощью гиперссылки: <a href="имя_файла.djvu" target="имя_окна"&rt;

После этого DjVu-изображение будет просматриваться через браузеры (Netscape Navigator и Internet Explorer - при наличие соответствующего plug-in, о чем ниже) точно также, как и html-страница с помещенным в нее GIF или JPEG-изображением. Кроме того, на самом DjVu-изображении можно создать активные области (image map) с привязанными к ним гиперссылками на html- или djvu-файлы. Для этого служит команда djedit, запускаемая из Иксов в окне терминала или мини-командной строки, имеющейся в большинстве оконных менеджеров. Для начала она предлагает выбрать DjVu-файл для редактирования. Что можно сделать, нажав кнопку Browse или - введя полный путь вручную.

На вызванном изображении (которое может быть масштабировано для просмотра) создается будущая активная область - в виде прямоугольника, овала или полигона). В возникшем после этого окошке вводится URL (к сожалению, только руками, здесь уже никакого броузинга нет), альтернативный текст и, при необходимости - атрибут target с требуемым его значением. Активная область может быть в любой момент отредактирована - как ее размер, так и гиперссылка; правда, превратить прямоугольник в овал или полигон - нельзя. И областей этих может быть сколько угодно, вернее - сколько поместится; разумеется, при их взаимном перекрытии активными окажутся области, введенные последними.

Кроме этого, в программе djedit можно изменить цвет фона DjVu-изображения, его выравнивание относительно окна браузера, а также исходный масштаб просмотра в последнем. Для исходного масштаба по умолчанию принято 75% от полного размера изображения.

Обработанную таким образом серию DjVu-изображений можно использовать для навигации по карте точно таким же образом, как систему текстовых гиперссылок или навигационных карт на базе, скажем, GIF-изображений. Однако существует и другой способ просмотра серии DjVu-изображений - путем создания многостраничного DjVu-документа. Для чего предназначен пакет djvumulti. Процесс этот проходит в два этапа. Сначала серия простых DjVu-изображений индексируется с помощью команды

$ djvujoin [options] file1 file2 ... fileN newindex

в результате чего создается индексный файл с расширением по умолчанию *.iff. Вместо перечисления файлов можно задать каталог (один или несколько), содержащий DjVu-изображения; все они будут проиндексированы, однако в алфавитном порядке их имен. Тогда как в первом случае можно задать произвольную последовательность.

На втором этапе проиндексированные изображения объединяются в единый DjVu-файл с помощью команды

$ djvubundle [options] file1 file2 ... fileN newfile.djvu

Итоговый newfile.djvu - это и будет многостраничный DjVu-документ; последовательность страниц в нем будет совпадать с последовательностью перечисления файлов при выполнении индексации.

Чем его смотреть

Как уже говорилось, подготовленные DjVu-изображения и многостраничные DjVu-документы могут быть просмотрены в браузерах Netscape Navigator 3-й и 4-й версий и (на платформе Windows) также в Internet Explorer 4-й и 5-й версий (с более ранними - не проверял) после установки соответствующих plug-in.

DjVu Plug-in для Netscape доступен (на том же сайте AT&T) для всех тех же платформ, что и инструментарий. Он существует в двух версиях - npdjvu-2.0 и npdjvu-3.0. Первая считается как бы стабильной. Это архив tar.gz объемом чуть больше мегабайта. Установка ее полностью аналогична таковой для программного инструментария, описанной выше. Предусматривается два вида установки - private (в режиме пользователя) и public (в режиме root). Следует помнить только, что, возможно, потребуется внести некоторые исправления в описание MIME-типов в Netscape Navigator (по крайней мере, у меня было именно так). Впрочем, никаких сложностей при этом не возникает.

Версия npdjvu-3.0 (архив tar.gz объемом 1,5 Мбайт) имеет статус бета. Установка ее - еще проще. Архив распаковывается в промежуточный каталог. Затем в графической среде запускается Netscape Navigator (обязательное требование!), а в окне терминала - инсталляционный скрипт. После согласия с лицензионным соглашением мгновенно происходит инсталляция - и все, DjVu-изображения доступны в окне браузера; перезапуск последнего - не требуется. Если все это происходит в режиме пользователя - автоматически осуществляется установка private, если в режиме администратора (или после команды su) - установка public.

Plug-in для Windows (как Netscape Navigator, так и Internet Explorer) - самораспаковывающийся архив размером около 600 Кбайт. Запуск его приводит к автоматической установке plug-in, каковая проистекает без всяких осложнений.

После установки plug-in и загрузки через браузер DjVu-изображения в нижней части окна браузера появляется дополнительная панель (несколько различающаяся в разных браузерах), содержащая средства управления для DjVu-изображения - печати, масштабирования, навигации по страницам (для многостраничного DjVu-документа). Масштабирование возможно как в сторону уменьшения (до 25% от исходного размера), так и увеличения (до 999%). Реально изображение целесообразно увеличивать не более чем до 300% от исходного: при больших увеличениях качество существенно падает. Хотя текст не теряет читабельности, а рисованные элементы - четкости вплоть до максимального увеличения.

Что же дает применение формата DjVu по сравнению с традиционными видами Сетевой графики?

Для чего он годится

Чтобы сравнить формат DjVu по качеству изображения и размеру с широко применяемыми форматами Интернет-графики, было изготовлено пять тестовых изображений в формате TIFF (полученных путем экспорта из StarDraw), каждый из которых иллюстрирует один из видов графики, применяемой, скажем, в геолого-картографической практике (таблица). Это серия из трех карт, построенных по данным формата GTOPO30 DEM (digital elevation modelling - трехмерные модели высот): полноцветная карта (Image Map - не путать с навигационными картами image map), полутоновая Shadow Map и цветная псевдотрехмерная блок-диаграмма Surface Map, к одной из которых (Shadow Map) прилагается текстовая легенда (Legend). В дополнение к ним приведена традиционная геологическая карта, отрисованная по данным полевых наблюдений (Solid Map). Все четыре карты, помимо текстовых подписей, содержат также рисованные геологические границы.

Каждый из этих файлов был преобразован в DjVu-изображение программой djvuencode в режиме фотокачества. Для сравнения приведены также те же изображения, конвертированные в форматы GIF, JPEG и PNG. Конвертирование осуществлялось программой Compupic с параметрами по умолчанию: 256-цветная палитра для GIF, 75-процентное сжатие для JPEG и 6-й уровень компрессии (при 24-битной палитре) для PNG. Рассмотрение полученных изображений показывает, что DjVu-инструментарий вполне прилично справился с поставленной задачей. Качество итоговых изображений почти не уступает исходному TIFF-файлу, что особенно ярко проявлено в отношении Shadow Map, плохо передаваемой всеми традиционными форматами Интерент-графики, за исключением PNG (но - ценой размера файла).

На всех DjVu-изображениях обращает на себя внимание четкая передача текста. И это при том, что для подписей специально был выбран шрифт с засечками, обычно хуже передаваемый в растровой форме, чем шрифты sans serife. Характерно также полное отсутствие артефактов вокруг рисованных границ, неизбежно возникающих при использовании формата JPEG. Что касается чисто текстовой страницы, то воспроизведение ее (по крайней мере при достаточно крупном кегле) по качеству приближается к формату PDF. Достоинства формата DjVu особенно наглядно проступают, если рассмотреть объем получающихся файлов (см. таблицу).

Таблица. Сравнение объема файлов (в Кбайт) формата DjVu с традиционными форматами Интерент-графики

Формат Image Map Shadow Map Surface Ma Solid Map Legend
TIFF 1000 593 357 306 88
PNG 477 417 195 126 27
GIF 217 180 112 118 26
JPEG 143 197 155 86 129
DjVu 76 167 114 61 112

Примечание: Исходные TIFF-файлы (1073*745) получены экспортом из StarDraw 5.1a. Преобразование в PNG, GIF и JPEG выполнено программой Compupic (все параметры компрессии - по умолчанию), в формат DjVU - sdk djvu фирмы AT&T, параметры компрессии - фотокачество.

Рассмотрение таблицы показывает, что все четыре типа изображений в формате DjVu (за исключением текстовой страницы) в 2-4 раза меньше, чем их PNG-аналоги. Полноцветные изображения (Image Map) в 2 раза меньше JPEG-файлов и в 3 раза - GIF-файлов. Карта с полутоновой подложкой в градациях серого (Shadow Map) несколько меньше и GIF-, и JPEG-изображения. Что касается карт с фиксированными наборами цветов (Surface Map и Solid Map), то они в формате DjVu меньше или равны по объему GIF-аналогам, и на 20-30% меньше файлов JPEG. Лишь для чисто текстовой страницы файл DjVu уступил не только файлам GIF и PNG, но даже и исходному TIFF-файлу, сохранив небольшое преимущество только над файлом JPEG.

При этом следует учесть, что все файлы DjVu были подготовлены с максимально возможным качеством (и, соответственно, с минимальной компрессией), тогда как для PNG и JPEG были приняты промежуточные соотношения сжатия и качества.

Таким образом, формат DjVu в отношении как качества, так и компактности способен на равных, как минимум, конкурировать с традиционными для Интернет-графики растровыми форматами. А учитывая его способность к масштабированию и объединению в многостраничные документы - в некоторых случаях примение его можно считать оптимальным.

В каких же? Конечно, формат DjVu не подходит для изготовления баннеров, экранных кнопок и прочих графических элементов дизайна. Однако если речь идет о воспроизведении контента, особенно совмещающего текст и графику, равных ему я не вижу. Кое в чем он может выступать как своего рода замена PDF-формата (если не требуется 100-процентная идентичность полиграфического и электронного отображений). Поскольку, при несколько более низком, но отнюдь не принципиально, качестве, он компактней (при небольших объемах текста), проще и быстрее в подготовке. Имея те же возможности в плане навигации по гиперссылкам и многостраничности.

Так что, учитывая отсутствие стандартного для Интернет векторного формата и попытки правообладателей на алгоритм GIF-компрессии получать за это деньги, возьму на себя смелость рекомендовать формат DjVu для представления графического контент весьма широкого плана. А бесплатность инструментария для работы с ним делает его прекрасным дополнением к бесплатной операционной системе Linux.

Заключение: за время, прошедшее с написания этой заметки, сфера применения формата DjVu существенно изменилась. Ныне он широко применяется для представления в Сети отсканированных книг, особенно таких, для которых следует сохранить все полиграфические особенности оригинала, неизбежно теряемые при распознавании средствами OCR - рукописей, раритеных изданий, и так далее.