Portable anymap
Простые форматы хранения изображений portable pixmap (иногда определяемые как PNM): цветных (PPM), полутоновых (PGM) и чёрно-белых (PBM) определяют правила для обмена графическими файлами. Эти форматы могут обеспечивать промежуточное представление данных при конвертации растровых графических файлов трёх перечисленных типов между разными платформами. Некоторые приложения поддерживают эти три формата напрямую, определяя их как формат PNM (portable anymap). Формат PPM был разработан Джефом Посканзером (англ. Jeff Poskanzer).
Portable pixmap | |
---|---|
Расширение |
.pnm [1] |
MIME-тип | image/x-portable-pixmap, -graymap, -bitmap, -anymap все неофициальные |
Разработчик | Посканзер, Джеф |
Тип формата | Графические форматы |
Медиафайлы на Викискладе |
Описание формата файлаПравить
Разберём пример битового изображения буквы «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 определяет формат файла. Знак решётки (#) отделяет комментарий. Следующие два числа задают ширину и высоту. Затем следует матрица значений пикселов (в случае монохромного изображения, как в этом примере, — только нули и единицы).
Использование в 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 достаточно прост для самостоятельного написания кода, который сможет читать и записывать данные в этом формате.
См. такжеПравить
СсылкиПравить
- Format details for the various pnm formats:
- ↑ FILE NAME // The PNM Format