Семейство Netpbm: PBM, PGM, PPM и магические числа P1–P6
Почему форматов целых пять, если все они делают примерно одно? Откуда в начале каждого такого файла берутся загадочные значки вроде P1 или P6? И почему одну и ту же картинку можно записать двумя способами — «для глаз» и «для машины»? Сейчас всё разложим по полочкам. Это короткое, но плотное путешествие по самому логичному семейству форматов в истории — без воды и с конкретными примерами.
Одно семейство, одна идея
Netpbm — это не один формат, а целое семейство близких родственников. Все они выросли из одной мысли программиста Джефа Поскансера в 1980-х: изображение должно описываться так просто, чтобы его можно было переслать по почте обычным текстом и легко прочитать любой программой. Если вы ещё не знаете базовых вещей про эти форматы, начните со статьи «Что такое PPM» — здесь мы идём глубже.
Гениальность семейства в том, что все форматы устроены по одному шаблону: магическое число → размеры → (макс. значение) → данные пикселей. Зная один, вы автоматически понимаете все остальные. Меняется лишь одно: сколько информации приходится на пиксель.
Зачем разные форматы
Чёрно-белой картинке не нужны три цветовых канала — это была бы пустая трата места. Поэтому семейство даёт отдельный формат под каждый случай: бит, серый, цвет. Минимум лишнего.
Тройка форматов: PBM, PGM, PPM
В основе семейства — три формата, и отличаются они только тем, сколько цвета хранят на один пиксель:
- PBM (Portable Bitmap) — самый аскетичный. Каждый пиксель — это 1 бит: чёрный или белый, без полутонов. Идеален для штрихкодов, факсов, чёрно-белых масок.
- PGM (Portable Graymap) — оттенки серого. Один канал яркости на пиксель (обычно 0–255). Это «фотография без цвета».
- PPM (Portable Pixmap) — полный цвет. Три канала на пиксель: красный, зелёный, синий. Именно его чаще всего и встречают на практике.
Заметили закономерность в названиях? Bitmap → Graymap → Pixmap. Bit, Gray, Pixel — ровно по нарастанию количества данных.
Магические числа P1–P6
Теперь — к самому интересному. Откуда программа знает, какой именно формат перед ней? По первым двум символам файла — магическому числу. Это буква P и цифра. Всего цифр шесть, и распределены они идеально логично:
| Магич. число | Формат | Что хранит | Вид |
|---|---|---|---|
| P1 | PBM | Чёрно-белое (1 бит) | Текст (ASCII) |
| P2 | PGM | Оттенки серого | Текст (ASCII) |
| P3 | PPM | Цвет (RGB) | Текст (ASCII) |
| P4 | PBM | Чёрно-белое (1 бит) | Бинарь (raw) |
| P5 | PGM | Оттенки серого | Бинарь (raw) |
| P6 | PPM | Цвет (RGB) | Бинарь (raw) |
Логика железная: нечётные числа (1, 2, 3) — это текстовый вариант, чётные (4, 5, 6) — бинарный. А внутри каждой пары растёт сложность цвета: бит → серый → RGB. Запомнив эту таблицу, вы расшифруете любой Netpbm-файл, просто взглянув на его первые два символа.
ASCII против binary: один формат, два лица
Самое частое недопонимание: чем «текстовый» PPM отличается от «бинарного», если картинка-то одна и та же? Разница — в способе записи тех же чисел. Посмотрим на один и тот же крошечный цветной пиксель (R=255, G=0, B=0 — чистый красный).
В текстовом варианте (P3) он выглядит так — это можно прочитать глазами:
P3
1 1
255
255 0 0
В бинарном варианте (P6) заголовок остаётся обычным текстом, а вот сами пиксели записаны уже не цифрами, а напрямую «языком компьютера» — три значения цвета идут вплотную, без пробелов и переносов строки. Глазами в Блокноте вы увидите «кракозябры», зато файл в несколько раз меньше и читается программой мгновенно.
Про maxval и 16 бит
Число maxval в заголовке задаёт максимум яркости канала. Если оно меньше 256 — каждый канал занимает 1 байт. Если больше (до 65535) — 2 байта на канал, старший байт первым. Так PPM умеет хранить 16-битную точность для научных задач.
PNM и PAM: зонтик и расширение
В документации часто встречаются ещё два имени — и они вносят путаницу, хотя всё просто.
PNM (Portable Anymap) — это не отдельный формат, а общее имя для PBM, PGM и PPM. Утилиты семейства принимают «любой из трёх» и сами разбираются по магическому числу, что именно им дали. Расширение .pnm означает «это что-то из Netpbm, разберись на месте».
PAM (Portable Arbitrary Map) с магическим числом P7 — более позднее и продвинутое расширение. У него более свободный заголовок, и он умеет хранить не только красный-зелёный-синий, но и дополнительные данные о каждом пикселе. Главное преимущество — поддержка альфа-канала (прозрачности), которой у классических PBM/PGM/PPM нет.
Какой вариант выбрать
На практике выбор простой. Для реальной работы и хранения берут бинарные варианты (P4/P5/P6) — они в разы компактнее. Текстовые (P1/P2/P3) хороши для обучения, отладки и когда хочется заглянуть в файл руками и понять, что внутри.
Но в любом случае PPM-файл не покажет браузер и не примет большинство редакторов. Поэтому финальный шаг почти всегда один — конвертация в PNG или JPG. Как именно это сделать, подробно расписано в статье «Чем открыть PPM», а сравнение PPM с PNG и BMP по размеру и сжатию — в материале «PPM против PNG и BMP».
Превратите любой Netpbm-файл в обычную картинку
Неважно, P3 у вас или P6 — конвертер FormatZ прочитает файл и отдаст компактный PNG за пару секунд, прямо в браузере.
Конвертировать PPM в PNG

