Portable anymap

Поделись знанием:
Перейти к: навигация, поиск
Portable pixmap
MIME-тип

image/x-portable-pixmap, -graymap, -bitmap, -anymap все неофициальные

Тип формата

Графические форматы

Простые форматы хранения изображений portable pixmap (иногда определяемые как PNM): цветных (PPM), полутоновых (PGM) и чёрно-белых (PBM) определяют правила для обмена графическими файлами. Эти форматы могут обеспечивать промежуточное представление данных при конвертации растровых графических файлов трёх перечисленных типов между разными платформами. Некоторые приложения поддерживают эти три формата напрямую, определяя их как формат PNM (portable anymap). Формат PPM был разработан Джефом Посканзером (англ. Jeff Poskanzer).





Описание формата файла

Разберём пример битового изображения буквы «J»:

....X.
....X.
....X.
....X.
....X.
....X.
X...X.
.XXX..
......
......

Формат PBM представляет этот пример в следующем виде:

P1
# This is an example bit map file j.pbm
6 10
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
1 0 0 0 1 0
0 1 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0

Строка P1 определяет формат файла. Знак решётки (#) отделяет комментарий. Следующие два числа задают ширину и высоту. Затем следует матрица значений пикселов (в случае монохромного изображения, как в этом примере, — только нули и единицы).

Результирующее изображение: . Оно же, увеличенное в 20 раз:

Использование в Netpbm

Пакет Netpbm может, например, использовать последовательно две программы конвертации для превращения этого кода в файл BMP:

pgmtoppm "#FFFFFF" j.pbm  > j.ppm
ppmtobmp j.ppm > j.bmp

В зависимости от распознанного формата файла, система простых графических файлов portable pixmap может различать три сходных формата файлов, каждый в двух версиях:

  • PBM — чёрно-белый (portable bitmap) (P1/P4) — 1 бит на пиксел
  • PGM — полутоновый (portable graymap) (P2/P5) — 8 бит на пиксел
  • PPM — цветной (portable pixmap) (P3/P6) — 24 бита на пиксел (по 8 на красный, зелёный и синий)

В каждом случае нижняя версия (P1, P2 или P3) относятся к удобочитаемым, основанным на ASCII форматам, сходным с показанным на примере в этой статье. А верхние версии (P4, P5 и P6) относятся к бинарным форматам, менее удобным для разбора, но более эффективным для экономии места в файле и более удобным для разбора из-за отсутствия пробелов.

16-битное расширение

Изначально бинарные форматы PGM и PPM (P5 и P6) поддерживали битовую глубину не более 8 бит. Конечно, можно было использовать форматы ASCII, но при их использовании увеличивается размер и замедляется чтение файлов. В результате многие разработчики пытались расширить формат для поддержки большей битовой глубины. При использовании большей глубины мы сталкиваемся с проблемой порядка байтов (Endianness) в файле. Различные приложения не согласованы в каком-либо одном следовании порядка байтов (Endianness). Netpbm при работе с PNM de facto использует порядок от старшего к младшему (big-endian).

Пример PPM

P3
# P3 обозначает, что цвета даны в ASCII, 
# затем идут цифры, обозначающие число колонок и рядов (3 колонки и 2 ряда), 
# 255 для максимального значения цвета, 
# затем триплеты RGB 
3 2
255
255 0 0
0 255 0
0 0 255
255 255 0
255 255 255
0 0 0

Изображение (увеличено):

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

P6
#тут возможна строка комментариев
3 2
255
!@#$%^&*()_+|{}:"<

Формат PPM несжатый, поэтому файлы в нём имеет большие размеры. Например, PNG-изображение 192×128 может иметь размер 552 байта. После его конвертации в PPM размер файла составит 73 848 байт.

Формат PPM достаточно прост для самостоятельного написания кода, который сможет читать и записывать данные в этом формате.

См. также

Напишите отзыв о статье "Portable anymap"

Ссылки

  • Format details for the various pnm formats:
    • netpbm.sourceforge.net/doc/pbm.html
    • netpbm.sourceforge.net/doc/pgm.html
    • netpbm.sourceforge.net/doc/ppm.html
    • netpbm.sourceforge.net/doc/pam.html

Отрывок, характеризующий Portable anymap

– Ах Соня, если бы ты знала его так, как я! Он сказал… Он спрашивал меня о том, как я обещала Болконскому. Он обрадовался, что от меня зависит отказать ему.
Соня грустно вздохнула.
– Но ведь ты не отказала Болконскому, – сказала она.
– А может быть я и отказала! Может быть с Болконским всё кончено. Почему ты думаешь про меня так дурно?
– Я ничего не думаю, я только не понимаю этого…
– Подожди, Соня, ты всё поймешь. Увидишь, какой он человек. Ты не думай дурное ни про меня, ни про него.
– Я ни про кого не думаю дурное: я всех люблю и всех жалею. Но что же мне делать?
Соня не сдавалась на нежный тон, с которым к ней обращалась Наташа. Чем размягченнее и искательнее было выражение лица Наташи, тем серьезнее и строже было лицо Сони.
– Наташа, – сказала она, – ты просила меня не говорить с тобой, я и не говорила, теперь ты сама начала. Наташа, я не верю ему. Зачем эта тайна?
– Опять, опять! – перебила Наташа.
– Наташа, я боюсь за тебя.
– Чего бояться?
– Я боюсь, что ты погубишь себя, – решительно сказала Соня, сама испугавшись того что она сказала.
Лицо Наташи опять выразило злобу.
– И погублю, погублю, как можно скорее погублю себя. Не ваше дело. Не вам, а мне дурно будет. Оставь, оставь меня. Я ненавижу тебя.
– Наташа! – испуганно взывала Соня.
– Ненавижу, ненавижу! И ты мой враг навсегда!
Наташа выбежала из комнаты.
Наташа не говорила больше с Соней и избегала ее. С тем же выражением взволнованного удивления и преступности она ходила по комнатам, принимаясь то за то, то за другое занятие и тотчас же бросая их.
Как это ни тяжело было для Сони, но она, не спуская глаз, следила за своей подругой.
Накануне того дня, в который должен был вернуться граф, Соня заметила, что Наташа сидела всё утро у окна гостиной, как будто ожидая чего то и что она сделала какой то знак проехавшему военному, которого Соня приняла за Анатоля.
Соня стала еще внимательнее наблюдать свою подругу и заметила, что Наташа была всё время обеда и вечер в странном и неестественном состоянии (отвечала невпопад на делаемые ей вопросы, начинала и не доканчивала фразы, всему смеялась).
После чая Соня увидала робеющую горничную девушку, выжидавшую ее у двери Наташи. Она пропустила ее и, подслушав у двери, узнала, что опять было передано письмо. И вдруг Соне стало ясно, что у Наташи был какой нибудь страшный план на нынешний вечер. Соня постучалась к ней. Наташа не пустила ее.
«Она убежит с ним! думала Соня. Она на всё способна. Нынче в лице ее было что то особенно жалкое и решительное. Она заплакала, прощаясь с дяденькой, вспоминала Соня. Да это верно, она бежит с ним, – но что мне делать?» думала Соня, припоминая теперь те признаки, которые ясно доказывали, почему у Наташи было какое то страшное намерение. «Графа нет. Что мне делать, написать к Курагину, требуя от него объяснения? Но кто велит ему ответить? Писать Пьеру, как просил князь Андрей в случае несчастия?… Но может быть, в самом деле она уже отказала Болконскому (она вчера отослала письмо княжне Марье). Дяденьки нет!» Сказать Марье Дмитриевне, которая так верила в Наташу, Соне казалось ужасно. «Но так или иначе, думала Соня, стоя в темном коридоре: теперь или никогда пришло время доказать, что я помню благодеяния их семейства и люблю Nicolas. Нет, я хоть три ночи не буду спать, а не выйду из этого коридора и силой не пущу ее, и не дам позору обрушиться на их семейство», думала она.


Анатоль последнее время переселился к Долохову. План похищения Ростовой уже несколько дней был обдуман и приготовлен Долоховым, и в тот день, когда Соня, подслушав у двери Наташу, решилась оберегать ее, план этот должен был быть приведен в исполнение. Наташа в десять часов вечера обещала выйти к Курагину на заднее крыльцо. Курагин должен был посадить ее в приготовленную тройку и везти за 60 верст от Москвы в село Каменку, где был приготовлен расстриженный поп, который должен был обвенчать их. В Каменке и была готова подстава, которая должна была вывезти их на Варшавскую дорогу и там на почтовых они должны были скакать за границу.