Все о файлах PBM
PBM — это, пожалуй, самый простой формат изображений в мире. Он состоит исключительно из цифр 0 и 1, причем каждая цифра соответствует одному пикселю. Строка и столбец в тексте определяют положение на изображении. Таким образом, изображения можно создавать даже с помощью текстового редактора. Это почти то же самое, что раскрашивать клетку карандашом. PBM не поддерживает сжатие, альфа-каналы, цвета. Даже оттенки серого. Он может просто нарисовать пиксель (1) или не нарисовать (0).
TLDR:
Файлы PBM являются частью более крупного семейства форматов. Этот формат и его «собратья» используются и по сей день, однако они не особенно подходят для обмена и долгосрочного архивирования. Они имеют большой размер, поддерживаются лишь немногими программами, но при этом отличаются высокой гибкостью и производительностью. Если вы нашли файл PBM, скорее всего, это промежуточный продукт или изображение, созданное в учебных целях. Ведь формат PBM очень хорошо подходит для наглядного представления информации, он практически не требует пояснений.
История файлов PBM
PBM был изобретен в 1980-х годах Джефом Посканзером, программистом из Беркли, который хотел решить простую проблему: отправлять изображения по электронной почте. В 1980-х годах электронная почта еще не была так развита, как сегодня. Надежно отправлять можно было только ASCII-символы, а бинарные файлы, такие как изображения, часто повреждались при передаче. Таким образом, Посканцер разработал с помощью PBM формат изображений, который решал именно эту проблему.
Техническое устройство
Изображение PBM в своей простой версии (P1) состоит из трех частей: магического числа, размеров и собственно данных пикселей. Опционально можно использовать комментарии, например, для описания содержания.
| Состав | Пример | Значение |
|---|---|---|
| Магическое число | P1 |
Plain PBM (ASCII-вариант) |
| Комментарий | # mein bild |
Опционально, с # введением |
| Ширина Высота | 24 7 |
Размеры в пикселях |
| Растровые данные | 0 1 1 0 ... |
1 = черный, 0 = белый |
Следующий пример показывает полное изображение из документации:
P1 # feep.pbm 24 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 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 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(цифры 0 отображены немного темнее только для лучшей визуализации)
Между нулями и единицами ясно различим текст FEEP. Таким образом, PBM соответствует двоичному ASCII ;).
Plain vs. Raw: P1 и P4
Позканцер позже ввел двоичный вариант и сделал его стандартным выводом инструментов Netpbm. Вариант Plain (P1) появился первым, но был заменен из-за гораздо большего потребления места («lavishly wasteful» — «чрезвычайно расточительный»).
| Характеристика | Plain PBM (P1) |
Raw PBM (P4) |
|---|---|---|
| Данные пикселей | ASCII-символы 0 и 1 |
биты, упакованные по 8 в байт |
| Удобно для чтения | Да, полностью | Только заголовок |
| Объем памяти на пиксель | ~2 байта (символ + пробел) | 1/8 байта (1 бит) |
| Макс. длина строки | Рекомендуется 70 символов | Без ограничений |
| Изображений в файле | Ровно 1 | Возможно несколько (с июля 2000 г.) |
Сегодня вся семья PBM, в частности PPM, часто используется в качестве промежуточного формата. В самом простом и кратком из всех вариантов применения он существует только в конвейере между двумя программами, то есть только на время выполнения. Это подводит нас к преимуществам формата:
Преимущества файлов PBM
- Отсутствие зависимостей: ни декодера, ни библиотеки. Для чтения и записи достаточно нескольких строк на C, Python или в оболочке.
- Философия Unix: инструменты PBM — это фильтры. Их можно соединять друг с другом с помощью конвейера:
cat bild.pbm | pbmtopgm | ppmtojpeg > out.JPG. Более 330 программ в пакете Netpbm работают именно так. - Педагогика: кто хочет понять обработку изображений (не редактирование изображений), в идеале начинает с PBM.
- Надежность: ни одного поврежденного заголовка, ни одного поврежденного блока. В файле может содержаться так мало информации, что практически ничего не может пойти не так. А если все-таки один бит выйдет из строя, изображение останется читаемым.
Семейство PBM
PBM не единственный. В конце 1988 года Посканцер расширил семейство, добавив PGM (Portable Gray Map, оттенки серого, магическое число P2/P5) и PPM (Portable Pixel Map, цвет RGB, P3/P6). Вместе они образуют PNM: Portable Any Map. Позже появился еще PAM (P7) в качестве универсального расширения.
PBM является основой и одновременно самым «радикальным» представителем семейства, предлагая всего два варианта: свет включен или выключен — пиксель есть или его нет. Никаких цветов, никакой прозрачности, никаких оттенков серого. Только черно-белое изображение, читаемое непосредственно в исходном коде.
Pbmplus и Netpbm
Посканцер поддерживал Pbmplus до его последнего выпуска в конце 1991 года. После этого проект больше не поддерживался. В 1993 году появился Netpbm как форк сообщества, по сути, перепакованная версия Pbmplus с исправлениями ошибок и расширениями от разработчиков со всего мира. С 1999 года Netpbm поддерживается Брайаном Хендерсоном и сегодня входит практически в каждый дистрибутив Linux.
PBM как таковой устарел. Почтовые серверы без проблем обрабатывают файлы JPG, PNG и даже видео. Однако «цветная» версия ppm используется ежедневно в конвейерах на системах Linux. PBM остается в образовательной сфере: его легко объяснить, легко понять и — настолько прост PBM — нарисовать на клетчатой бумаге.
Источники
Netpbm Спецификация формата PBM
Netpbm История — очень интересная статья об истории pbm
Вики: Джеф Посканцер
Конвертируйте, открывайте и редактируйте файлы PBM
Информация о файлах PBM
- Программное обеспечение для открытия файлов PBM
- Программное обеспечение для редактирования файлов PBM
- MIME-тип для PBM
Комментариев нет