Что такое формат файла PNM?
.pnm (Portable Anymap) - это общее расширение, охватывающее три родственных подформата несжатых растровых изображений из семейства Netpbm: PBM (Portable Bitmap, 1-битный черно-белый), PGM (Portable Graymap, оттенки серого) и PPM (Portable Pixmap, цветной). Конкретный подтип любого файла .pnm определяется по его первым двум байтам: от P1 до P3 для ASCII-вариантов («текстовых») и от P4 до P6 для бинарных («сырых») вариантов.
Джеф Посканзер создал оригинальный формат PBM в 1988 году как часть своего набора инструментов Pbmplus, вскоре добавив PGM и PPM. Форматы были разработаны как максимально простое представление изображений без потерь, способное выдерживать передачу через 7-битные почтовые каналы. Варианты ASCII хранят значения пикселей в виде десятичных целых чисел, разделенных пробелами, после текстового заголовка; бинарные варианты упаковывают необработанные байты сразу после заголовка для более компактного хранения.
Глубина цвета варьируется от 1 bpp (PBM) до 16 bpp на канал (PGM/PPM с 16-битным значением maxval), что дает до 48 bpp для цветных изображений. Формат не предусматривает сжатия, шифрования, цветовых профилей, данных EXIF или миниатюр - он намеренно минималистичен.
PNG является современной заменой для хранения без потерь, но файлы .pnm остаются повсеместным промежуточным форматом в конвейерах обработки изображений Unix. ImageMagick, GIMP, FFmpeg и практически все инструменты Unix для работы с изображениями читают и записывают этот формат нативно.
Безопасность и защита
РИСК: LOWPNM/PBM/PGM/PPM относятся к числу простейших форматов изображений - текстовый заголовок плюс необработанные данные пикселей (или значения ASCII). Нет выполнения кода, нет скриптов, нет уязвимостей сжатия. Очень безопасны для открытия. Основной риск - тривиально большой размер несжатого файла для изображений высокого разрешения.
Детали формата
в двух словахПрограммы, открывающие файлы PNM
Технические подробности
глубокая спецификация| Подформаты | Общее название для PBM (P1/P4, 1 бит), PGM (P2/P5, оттенки серого) и PPM (P3/P6, цвет) |
| Магические байты | Первые 2 байта: `P` (0x50) + цифра от `1` до `6` (0x31-0x36) - определяет подтип и кодировку (ASCII или бинарная) |
| Варианты ASCII (P1-P3) | Значения пикселей хранятся как десятичные целые числа, разделенные пробелами - человекочитаемые и безопасные для 7-битных систем |
| Бинарные варианты (P4-P6) | Сырые байты пикселей упакованы сразу после заголовка ASCII - более компактные, те же логические данные |
| Сжатие | Отсутствует - данные пикселей хранятся без сжатия во всех вариантах |
| Глубина цвета | 1 bpp (PBM); 8 или 16 bpp на канал в оттенках серого (PGM); 24 или 48 bpp в цвете (PPM с 16-битным maxval) |
| Структура заголовка | Поля ASCII: магическое число, необязательные строки комментариев `#`, ширина, высота, затем maxval (отсутствует для P1/P4 1-бит) |
| Порядок байтов | Big-endian для 16-битных выборок в бинарных вариантах P5/P6; не применимо для 8-битных или ASCII форматов |
| Ограничение Maxval | Должно быть в пределах 1-65 535 (uint16); значения ≤ 255 используют 1 байт на выборку в бинарных режимах P4-P6 |
| Размеры | Максимум не определен; на практике ограничен доступной системной памятью |
| MIME-тип | `image/x-portable-anymap`; подтипы: `image/x-portable-bitmap`, `image/x-portable-graymap`, `image/x-portable-pixmap` |
| Расширение PAM | P7 (`.pam`, Portable Arbitrary Map) расширяет PNM для произвольного количества каналов и глубины цвета |
| Типичное использование | Промежуточный формат в конвейерах обработки изображений Unix; нативный ввод-вывод для ImageMagick, GIMP, FFmpeg и большинства инструментов Unix |
| Выпущен | 1988 (Jef Poskanzer's Pbmplus toolkit; PBM first, PGM and PPM by year-end) |
| Последняя версия | Netpbm 11.x (2020s); format spec stable since early 1990s |
| Открыть стандартное | Да · без роялти |
| Спецификация | netpbm.sourceforge.net |
Конвертации PNM
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах PNM.