Добрый вечер. Сегодня потребовалось разобраться со структурой файлов PBM/PGM/PPM (собирательно — PNM). Выяснил, что существует два типа PNM: текстовые (plain) и бинарные (raw). С текстовым PBM/PGM разобрался, получить цвета как массив чисел уже могу, но не могу понять структуру бинарного PBM. Не могли бы вы подсказать, где там собака зарыта? Желательно пример на Python. Содержимое текстового (plain) PBM выглядит так:
P1
# This is a comment
5 5
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Вот как выглядит содержимое двоичного (raw) PBM:
'P4\n# This is a comment\n5 5\n\xf8\xf8\xf8\xf8\xf8'
Вот что гласит информация из man:
A raster of Height rows, in order from top to bottom. Each row is Width bits, packed 8 to a byte, with don't care bits to fill out the last byte in the row. Each bit represents a pixel: 1 is black, 0 is white. The order of the pixels is left to right. The order of their storage within each file byte is most significant bit to least significant bit. The order of the file bytes is from the beginning of the file toward the end of the file.
A row of an image is horizontal. A column is vertical. The pixels in the image are square and contiguous.
Если честно, не понимаю, как должен выглядеть код на Python для создания/чтения двоичного PBM. Почему-то преследует подозрение, что надо как-то задействовать array или struct, но не уверен, что это подозрение верно. Не могли бы вы подсказать, каков принцип создания/чтения этих двоичных файлов, желательно на Python?
Спасибо!