pam - Общий двумерный растровый формат Netpbm
ОБЩАЯ ИНФОРМАЦИЯ
Формат изображения PAM — это базовый двумерный растровый формат.
Он предназначен для использования с самыми разными типами графики, но теоретически может использоваться для любых данных, организованных в виде двумерного прямоугольного массива. В действительности, с другой точки зрения, его можно рассматривать как формат для данных, организованных в виде трехмерного массива.
Название «PAM» — это аббревиатура от «Portable Arbitrary Map» (портативное произвольное отображение). Эта аббревиатура имеет больше смысла, если рассматривать ее в контексте других форматов Netpbm: PBM, PGM и PPM.
Этот формат не определяет значение данных в какой-либо конкретной точке массива. Это могут быть значения интенсивности красного, зеленого и синего цветов, так что массив представляет собой визуальное изображение, или это могут быть те же компоненты красного, зеленого и синего цветов плюс компонент прозрачности, или он может содержать годовые объемы осадков для мест на поверхности Земли. Любой процесс, использующий формат PAM, должен дополнительно определить формат, чтобы указать значения данных.
PAM-изображение описывает двумерную сетку кортежей. Кортежи расположены в строках и столбцах. Ширина изображения — это количество столбцов. Высота изображения — это количество строк. Все строки имеют одинаковую ширину, и все столбцы имеют одинаковую высоту. Кортежи могут иметь любую степень, но все кортежи имеют одинаковую степень. Степень кортежей называется глубиной изображения. Каждый элемент кортежа называется образцом. Образец — это целое число без знака, которое представляет собой точку на шкале, начинающейся с нуля и заканчивающейся определенным максимальным значением, называемым maxval. Значение maxval одинаково для всех образцов в изображении. Двумерный массив всех N-х образцов каждого кортежа называется N-м слоем или N-м каналом изображения.
Хотя базовый формат не присваивает никакого значения значениям кортежей, он включает в себя необязательную строку, которая описывает это значение. Содержимое этой строки, называемое типом кортежа, произвольно с точки зрения базового формата PAM, но пользователи формата могут присваивать ему значения по соглашению, чтобы они могли идентифицировать свои конкретные реализации формата PAM. Некоторые типы кортежей определены как официальные подформаты PAM. См. Определенные типы кортежей.
Запутанная вселенная форматов Netpbm
Легко запутаться в отношениях между форматами PAM, PBM, PGM, PPM и PNM. Вот немного пояснений:
«PNM» — это не совсем формат. Это сокращение для форматов PBM, PGM и PPM в совокупности. Это также название группы библиотечных функций, каждая из которых может обрабатывать все три этих формата.
"PAM" — это, по сути, четвертый формат. Но он настолько универсален, что одну и ту же информацию можно представить в PAM-изображении, как и в PBM-, PGM- или PPM-изображении. И, фактически, программа, разработанная для чтения PBM-, PGM- или PPM-изображений и использующая последнюю версию библиотеки Netpbm, сможет без проблем читать эквивалентное PAM-изображение, и программа даже не заметит разницы.
Чтобы еще больше запутать ситуацию, существует набор библиотечных подпрограмм, называемых «функциями pam», которые читают и записывают формат PAM, а также читают и записывают форматы PBM, PGM и PPM. Это делается потому, что последние форматы намного старше и популярнее, поэтому даже новая программа должна с ними работать. Использование библиотеки для обработки всех форматов упрощает написание программ, которые также используют более новый формат PAM.
РАСПОЛОЖЕНИЕ
Удобный способ точно читать и записывать формат PAM — использовать библиотеку подпрограмм libnetpbm(1) на языке C.
Файл PAM состоит из последовательности одного или нескольких PAM-изображений. Перед, после или между изображениями нет данных, разделителей или заполнения.
Каждое PAM-изображение состоит из заголовка, за которым немедленно следует растр.
Вот пример заголовка:
P7
WIDTH 227
HEIGHT 149
DEPTH 3
MAXVAL 255
TUPLTYPE RGB
ENDHDR
Заголовок начинается с символов ASCII «P7», за которыми следует символ новой строки. Это магическое число.
Примечание: изображения миниатюр xv также начинаются с магического числа «P7». (Это и PAM были независимыми расширениями форматов Netpbm). Остальная часть формата позволяет легко отличить PAM от этого формата.
Заголовок продолжается произвольным количеством строк текста ASCII. Каждая строка заканчивается и ограничивается символом новой строки.
Каждая строка заголовка состоит из нуля или более токенов, разделенных пробелами, или начинается с «#». Если она начинается с «#», то это комментарий, и остальная часть этой спецификации не применяется к ней.
Строка заголовка, не содержащая токенов, допустима, но не имеет смысла.
Тип строки заголовка определяется первым токеном, который содержит не более 8 символов:
ENDHDR Это последняя строка в заголовке. Заголовок должен содержать ровно одну такую строку заголовка.
HEIGHT Второй токен — десятичное число, представляющее высоту изображения (количество строк). Заголовок должен содержать ровно одну такую строку заголовка.
WIDTH Второй токен — десятичное число, представляющее ширину изображения (количество столбцов). Заголовок должен содержать ровно одну такую строку заголовка.
DEPTH Второй токен — десятичное число, представляющее глубину изображения (количество плоскостей или каналов). Заголовок должен содержать ровно одну такую строку заголовка.
MAXVAL Второй токен — десятичное число, представляющее максимальное значение изображения. Заголовок должен содержать ровно одну такую строку заголовка.
TUPLTYPE
Заголовок может содержать любое количество этих строк заголовка, включая ноль. Остальная часть строки является частью типа кортежа. Остальная часть строки не разбивается на токены, но тип кортежа не включает пробелы сразу после токена TUPLTYPE или в самом конце строки. Он также не включает символ новой строки. После токена TUPLTYPE должно быть что-то, отличное от пробелов.
Если в заголовке присутствует несколько строк TUPLTYPE, тип кортежа представляет собой конкатенацию значений из каждой из них, разделенных одинарным пробелом, в порядке их появления в заголовке. Если строк TUPLTYPE нет, тип кортежа — пустая строка.
Растр состоит из каждой строки изображения, в порядке сверху вниз, последовательно, без каких-либо разделителей между строками, перед ними или после них.
Каждая строка состоит из каждого кортежа в строке, в порядке слева направо, последовательно, без каких-либо разделителей между кортежами, перед ними или после них.
Каждый кортеж состоит из каждой выборки в кортеже, в порядке, последовательно, без каких-либо разделителей между выборками, перед ними или после них.
Каждая выборка состоит из беззнакового целого числа в чистом двоичном формате, с старшим байтом первым. Количество байтов — минимальное количество байтов, необходимое для представления maxval изображения.
Символ, называемый «новая строка», — это символ, известный в ASCII как перевод строки (Line Feed или LF).
ОГРАНИЧЕНИЯ
Высота, ширина, глубина и maxval должны быть не менее 1.
Высота, ширина и глубина не имеют определенного максимума, но процессоры и генераторы изображений обычно имеют свои собственные ограничения.
maxval изображения никогда не превышает 65535. (Причина ограничения заключается в том, чтобы упростить создание процессора изображений, в котором промежуточные арифметические значения часто должны помещаться в 31 или 32 бита). До октября 2005 года ограничение не было указано, но по сути все реализации всегда его соблюдали.
ОПРЕДЕЛЕННЫЕ ТИПЫ КОРТЕЖЕЙ
Некоторые типы кортежей определены в этой спецификации для указания официальных подформатов PAM для особенно популярных приложений формата. Пользователи формата также могут определять свои собственные типы кортежей и, следовательно, свои собственные подформаты.
Тип кортежа влияет только на значения (которые являются беззнаковыми целыми числами) выборок в кортежах изображения. Он не влияет на то, как выборки или кортежи кодируются. Тип кортежа может влиять на значение положения кортежа в массиве (например, он может указывать в визуальном изображении, что кортеж в строке 1 находится вверху изображения, а не внизу).
Тип кортежа никогда не определяет, сколько выборок находится в кортеже (это вместо этого определяется строкой заголовка DEPTH). Можно сказать, что тип кортежа подразумевает глубину (количество выборок на кортеж), поскольку определенные типы кортежей допустимы только в сочетании с определенными значениями DEPTH, но хорошей практикой является использование DEPTH для глубины при декодировании растра и отдельная проверка согласованности глубины с типом кортежа. Кроме того, хорошей практикой является прием глубины, которая слишком велика, и просто игнорирование выборок с более высокими номерами.
PAM используется для визуальных изображений
Одной из распространенных областей применения PAM является представление визуальных изображений, таких как изображения в более старых и конкретных форматах PBM, PGM и PPM.
Черно-белые изображения
Черно-белое изображение, которое в противном случае можно было бы представить в формате PBM, имеет тип кортежа "BLACKANDWHITE". Для такого PAM-изображения глубина равна 1, а maxval — 1, при этом в каждом кортеже содержится одно значение: 0 — для черного пикселя, 1 — для белого. Значения maxval, высота, ширина и порядок кортежей в растровом изображении имеют очевидное отношение к соответствующему изображению PBM.
Обратите внимание, что в формате PBM значение выборки, равное нулю, означает белый цвет, а в PAM — черный.
Оттенки серого
Изображение в оттенках серого, которое в противном случае можно было бы представить в формате PGM, имеет тип кортежа "GRAYSCALE". Для такого PAM-изображения глубина равна 1. Значения maxval, высота, ширина и растр имеют очевидное отношение к соответствующему изображению PGM.
Цветные изображения
Цветное изображение, которое в противном случае можно было бы представить в формате PPM, имеет тип кортежа "RGB". Для такого PAM-изображения глубина равна 3. Значения maxval, высота, ширина и растр имеют очевидное отношение к соответствующему изображению PPM. Первая плоскость представляет красный цвет, вторая — зеленый, а третья — синий.
Прозрачность
Для каждого из вышеупомянутых форматов визуальных изображений существует вариант, содержащий информацию о прозрачности. В этом варианте к типу кортежа добавляется суффикс "\_ALPHA" (например, "RGB\_ALPHA") и добавляется еще одна плоскость.
Плоскость с самым высоким номером — это плоскость непрозрачности (иногда называемая альфа-плоскостью или плоскостью прозрачности).
В этом типе изображения цвет, представленный пикселем, фактически является комбинацией явно указанного цвета переднего плана и цвета фона, который определяется позже.
Плоскости, отличные от плоскости непрозрачности, описывают цвет переднего плана. Значение выборки в плоскости непрозрачности указывает, насколько непрозрачен пиксель, указывая, какая часть света пикселя исходит от цвета переднего плана. Остальная часть света пикселя исходит от (неуказанного) цвета фона.
Например, в изображении GRAYSCALE\_ALPHA предположим, что плоскость 0 указывает на серый оттенок в 60% от белого, а плоскость 1 — на непрозрачность 25%. Цвет переднего плана — это серый оттенок в 60%, и 25% этого вносит вклад в окончательный цвет пикселя. Остальные 75% поступают от некоторого цвета фона. Итак, предположим, что цвет фона пикселя — это полностью белый цвет. Затем цвет пикселя составляет 90% от белого: 25% от переднего плана в 60% плюс 75% от фона в 100%.
Значение выборки — это доля непрозрачности, как описано выше, в виде доли от maxval. Обратите внимание, что оно не корректируется гамма-коррекцией, как значения цвета переднего плана.
ТИП МЕДИАИНТЕРНЕТА
Для PAM не зарегистрирован тип медиаинтернета (также известный как тип MIME, тип содержимого) в IANA, но неофициальное значение image/x-portable-arbitrarymap присваивается в этой спецификации, чтобы соответствовать общепринятым значениям для более старых форматов Netpbm.
ИМЯ ФАЙЛА
Обычно для имени файла PAM используется суффикс ".pam". Но это не обязательно.
СМОТРИТЕ ТАКЖЕ
Netpbm(1), pbm(1), pgm(1), ppm(1), pnm(1), libnetpbm(1)
ИСТОЧНИК ДОКУМЕНТАЦИИ
Эта страница руководства была сгенерирована инструментом Netpbm 'makeman' из HTML-источника. Основная документация находится по адресу:
http://netpbm.sourceforge.net/doc/pam.html