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