Разработчики) | Брайан Хендерсон |
---|---|
изначальный выпуск | 1988 ; 32 года назад ( 1988) |
Стабильный выпуск | 10.47.61 / 9 мая 2016 г. ; 4 года назад ( 2016-05-09) |
Репозиторий | |
Написано в | C, Perl, оболочка Unix |
Операционная система | Кроссплатформенность |
Лицензия | Различные, считаются без DFSG |
Интернет сайт | netpbm.sourceforge.net |
Netpbm - это пакет графических программ и библиотеки программирования с открытым исходным кодом. Он используется в основном в мире Unix, где его можно найти включенным во все основные дистрибутивы операционных систем с открытым исходным кодом, но он также работает в Microsoft Windows, macOS и других операционных системах.
Расширение имени файла | . pbm,.pgm,.ppm,.pnm |
---|---|
Тип интернет-СМИ | изображение / x-переносимое-растровое изображение, изображение / x-переносное-серое изображение, изображение / x-переносимое-растровое изображение, изображение / x-переносное-anymap |
Единый идентификатор типа (UTI) | public.pbm |
Разработан | Джеф Посканзер |
Тип формата | Форматы файлов изображений |
Расширен до | Переносимая произвольная карта (PAM) |
Открытый формат ? | да |
В проекте Netpbm используются и определяются несколько графических форматов. Портативный формат пиксельная ( PPM), то портативный формат graymap ( PGM) и формат портативных растровое изображение ( РВМ) являются форматы файлов изображений, предназначенных для быть легко обменены между платформами. Иногда их также называют переносимым форматом любой карты ( PNM), не путать с соответствующим переносимым форматом произвольной карты.
Формат PBM был изобретен Джефом Посканцером в 1980-х годах как формат, который позволял передавать монохромные растровые изображения в сообщении электронной почты в виде простого текста ASCII, что позволяло сохранять любые изменения в форматировании текста. Poskanzer разработал первую библиотеку инструментов для работы с форматом PBM, Pbmplus, выпущенную в 1988 году. Она в основном содержала инструменты для преобразования между PBM и другими графическими форматами. К концу 1988 года Poskanzer разработал форматы PGM и PPM вместе с соответствующими инструментами и добавил их в Pbmplus. Последний выпуск Pbmplus состоялся 10 декабря 1991 года.
В 1993 году была разработана библиотека Netpbm для замены не поддерживаемого Pbmplus. Это была просто переупаковка Pbmplus с дополнениями и исправлениями, присланными людьми со всего мира.
Каждый файл начинается с двухбайтового магического числа (в ASCII), которое определяет тип файла (PBM, PGM и PPM) и его кодировку ( ASCII или двоичный). Магическое число - это заглавная буква P, за которой следует однозначное число.
Тип | Магическое число | Расширение | Цвета | |
---|---|---|---|---|
ASCII | Двоичный | |||
Portable BitMap | P1 | P4 | .pbm | 0–1 (белый и черный) |
Портативный GrayMap | P2 | P5 | .pgm | 0–255 (серая шкала), 0–65535 (серая шкала), переменная |
Portable PixMap | P3 | P6 | .ppm | 16 777 216 (0–255 для каждого канала RGB ) |
Значение P7
относится к формату файла PAM, который также поддерживается библиотекой netpbm.
Форматы ASCII обеспечивают удобочитаемость и простой перенос на другие платформы; двоичные форматы более эффективны по размеру файла, но могут иметь собственные проблемы с порядком байтов.
В двоичных форматах PBM использует 1 бит на пиксель, PGM использует 8 или 16 бит на пиксель, а PPM использует 24 бита на пиксель: 8 для красного, 8 для зеленого, 8 для синего.
Обычно PGM хранит значения в линейном цветовом пространстве, но в зависимости от приложения часто использует sRGB или упрощенное гамма- представление. Данные файла не хранят информацию о том, какое цветовое пространство они используют, и должны выбираться пользователем или другим программным обеспечением. 16-битный PGM почти всегда сохраняется как линейный, так как гамма-коррекция обычно выгодна только в 8-битных форматах.
Обычно в 8-битном формате PPM цвета хранятся в нелинейном формате, обычно CIE Rec. 709 для красного, зеленого и синего, скорректировано CIE Rec. 709 передаточная функция гаммы. Однако очень часто цвет хранится с использованием цветового пространства sRGB или иногда с использованием линейного цветового пространства. В файле нет метаданных, указывающих, какой формат используется.
Вот простой пример формата PBM (в конце каждой строки есть символ новой строки):
P1 # This is an example bitmap of the letter "J" 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 определяет формат файла. Знак числа вводит комментарий. Следующие два числа указывают ширину и высоту. Далее следует матрица со значениями пикселей (здесь в монохромном случае только нули и единицы).
Необязательно, чтобы пиксели были хорошо выстроены, формат игнорирует пробелы и переводы строки в разделе данных, хотя рекомендуется, чтобы длина строки не превышала 76 символов. Ниже показано то же изображение:
P1 # This is an example bitmap of the letter "J" 6 10 000010000010000010000010000010000010100010011100000000000000
Вот получившееся изображение:
Вот оно снова увеличено в 20 раз:
Обратите внимание, что 0 означает белый пиксель, а 1 означает черный пиксель. Это контрастирует с другими форматами, где более высокие значения означают более яркие пиксели.
Двоичный формат P4 того же изображения представляет каждый пиксель одним битом, упаковывая 8 пикселей на байт, причем первый пиксель является самым старшим битом. Дополнительные биты добавляются в конце каждой строки, чтобы заполнить весь байт.
Форматы PGM и PPM (как ASCII, так и двоичные версии) имеют дополнительный параметр для максимального значения (числа серого между черным и белым) после размеров X и Y и перед фактическими данными пикселей. Черный - 0, максимальное значение - белое. В конце каждой строки есть символ новой строки.
Пример (увеличено)P2 # Shows the word "FEEP" (example from Netpbm man page on PGM) 24 7 15 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 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0 0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0 0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 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
Это пример цветного изображения RGB, сохраненного в формате PPM. В конце каждой строки есть символ новой строки.
Изображение (увеличенное)P3 3 2 255 # The part above is the header # "P3" means this is a RGB color image in ASCII # "3 2" is the width and height of the image in pixels # "255" is the maximum value for each color # The part below is image data: RGB triplets 255 0 0 # red 0 255 0 # green 0 0 255 # blue 255 255 0 # yellow 255 255 255 # white 0 0 0 # black
Двоичный формат P6 того же изображения представляет каждую цветовую составляющую каждого пикселя одним байтом (то есть тремя байтами на пиксель) в следующем порядке: красный, зеленый, затем синий. Файл меньше, но информация о цвете трудна для чтения людьми. Заголовок остается в формате ASCII, а аргументы по-прежнему разделяются пробелом. Информация о двоичном изображении идет после заголовка (который заканчивается пробелом).
Формат PPM не сжимается и, следовательно, требует больше места и пропускной способности, чем сжатый формат. Например, указанное выше изображение PNG ( переносимая сетевая графика ) 192 × 128 имеет размер файла 166 байт. При преобразовании в изображение 192 × 128 PPM размер файла составляет 73 848 байт. Формат PPM обычно является промежуточным форматом, используемым для работы с изображениями перед преобразованием в более эффективный формат, например формат PNG, без какой-либо потери информации на промежуточном этапе.
Изображение, показанное выше, с использованием только 0 или максимального значения для г Ed - г reen- б LUE каналы могут быть также закодированы как:
P3 # The same image with width 3 and height 2, # using 0 or 1 per color (red, green, blue) 3 2 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 0
Пробел, включая концы строк и строки комментариев, синтаксически эквивалентен одному пробелу в заголовках PNM. Для простых форматов P1... P3 это также влияет на строки растрового изображения; фактически строки должны быть ограничены 70 символами:
P3 3 2 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 0
Первоначальное определение двоичных форматов PGM и PPM (форматы P5 и P6) не допускало битовой глубины более 8 бит. Хотя формат ASCII может поддерживать большую битовую глубину, он увеличивает размер файла и, таким образом, замедляет операции чтения и записи. Соответственно, многие программисты расширили формат, чтобы обеспечить более высокую битовую глубину. При использовании более высоких битовых глубин возникает проблема, связанная с определением порядка байтов файла. Различные реализации не могли договориться о том, какой порядок байтов использовать, и некоторые связывали 16-битный порядок байтов с порядком упаковки пикселей. В Netpbm, де-факто стандартной реализации форматов PNM, старший байт стоит первым.
PFM (Portable Floatmap) - это неофициальное четырехбайтовое расширение IEEE 754 с плавающей запятой одинарной точности. Цветной файл идентифицируется текстом ASCII «PF» в первой строке заголовка и шкалой серого - «Pf». Следующая строка текста ASCII содержит ширину и высоту, разделенные шестнадцатеричным символом пробела 20 и иногда шестнадцатеричным 0A (в результате получается четыре строки). После каждой строки записывается шестнадцатеричный символ пробела 0A, а не комбинация Windows / DOS CR / LF. Третья строка текста ASCII указывает отрицательное число с прямым порядком байтов с плавающей запятой, а положительное число с прямым порядком байтов с плавающей запятой. Абсолютное значение числа указывает диапазон. Таким образом, третья строка, содержащая -1.0, указывает на прямой порядок байтов в диапазоне от нуля до единицы. Нет комментариев. После заголовка в файле указываются числа с плавающей запятой для каждого пикселя, указанные в порядке слева направо, снизу вверх. Некоторые программы предлагают PF4 как дополнительное расширение для формата RGBA.
Поддерживается программами Photoshop и Gimp.
Netpbm содержит более 220 отдельных программ в пакете, большинство из которых имеют в именах «pbm», «pgm», «ppm», «pam» или «pnm». Например, можно использовать pamscale для уменьшения изображения на 10%, pamcomp для наложения одного изображения поверх другого, pbmtext для создания изображения текста или уменьшения количества цветов в изображении с помощью pnmquant.
Программы разработаны как минимальные строительные блоки, которые можно использовать в различных комбинациях для других целей. Пакет Netpbm может, например, использовать две последовательные программы преобразования, чтобы преобразовать изображение в формате PBM в файл .bmp :
pgmtoppm "#FFFFFF" somepic.pbm gt; somepic.ppm ppmtobmp somepic.ppm gt; somepic.bmp
Обычно это делается в виде конвейера, чтобы сэкономить время выполнения и не оставлять временный файл somepic.ppm вокруг:
pgmtoppm "#FFFFFF" somepic.pbm | ppmtobmp gt; somepic.bmp
Программы Netpbm часто используются в качестве промежуточных звеньев для преобразования малоизвестных форматов. Например, может не быть инструмента для преобразования дампа окна X11 ( формат XWD ) непосредственно в файл Macintosh PICT, но это можно сделать, запустив xwdtopnm, а затем ppmtopict. (Инструменты, которые говорят, что они выводят вывод PNM, либо PBM, PGM или PPM. Инструменты, импортирующие PNM, будут читать любой из трех форматов.) В качестве более сложного примера инструменты Netpbm могут преобразовывать 48 × 48 XBM в Ikon и, в конечном итоге, X-Face.
Формат PBM (черно-белый) был изобретен Джефом Посканцером в середине 1980-х годов. В то время не существовало стандартного надежного способа отправки двоичных файлов по электронной почте, и попытки отправить что-либо, кроме 7-битного ASCII по электронной почте, часто приводили к повреждению данных. PBM был разработан для того, чтобы изображения можно было отправлять по электронной почте без повреждения. Poskanzer выпустил предшественника Netpbm под названием Pbmplus в 1988 году. К концу 1988 года Poskanzer разработал форматы PGM (оттенки серого) и PPM (цветной) и выпустил их вместе с Pbmplus.
Последний выпуск Pbmplus состоялся 10 декабря 1991 года. Poskanzer больше не выпускал обновлений, и в 1993 году вместо него был разработан Netpbm. Сначала это был не что иное, как переименованный выпуск Pbmplus, но обновления продолжали происходить до 1995 года, когда от пакета снова отказались. В 1999 году пакет Netpbm был подхвачен его нынешним сопровождающим Брайаном Хендерсоном.
В 2000 году к форматам файлов библиотеки Netpbm был добавлен PAM, позволяющий использовать альфа-канал.
Название Netpbm произошло от разработчиков программы, сотрудничавших через Интернет, что было примечательно в то время; NetBSD операционной системы и NetHack игры получили свои имена аналогично. (В отличие от более позднего, более широко распространенного формата Portable Network Graphics (PNG), "net" в названии фактически не относится к самому изображению, которое оптимизируется для передачи по сети.)
Расширение имени файла | .pam |
---|---|
Тип интернет-СМИ | изображение / х-портативный-произвольная карта |
Разработан | Брайан Хендерсон |
Тип формата | Форматы файлов изображений |
Расширен с | Переносимая карта (PNM) |
Открытый формат ? | да |
Portable Arbitrary Map ( PAM) - это расширение старых двоичных графических форматов P4... P6. PAM обобщает все функции PBM, PGM и PPM и предусматривает расширения. PAM определяет два новых атрибута; глубина и тип кортежа:
PAM поддерживается XnView и FFmpeg. Как указано, TUPLTYPE
это необязательно; однако FFmpeg требует этого.
Заголовок для формата файла PAM начинается с P7 и (в отличие от других форматов) заканчивается явным закрытием: ENDHDR. Концы строк в заголовке PAM имеют значение; для PNM концы строк - пробелы.
Не существует простой (удобочитаемой, основанной на ASCII ) версии PAM. Файлы PAM всегда являются двоичными, и попытки использовать переключатель -plain
с программами Netpbm, которые производят выходные данные PAM, приводят к сообщению об ошибке.
Для черно-белой версии PAM (глубина 1, тип кортежа BLACKANDWHITE), соответствующей PBM, PAM использует один байт на пиксель вместо использования PBM одного бита на пиксель (упаковка восьми пикселей в один байт). Кроме того, значение 1 в таком изображении PAM обозначает белый («свет включен»), в отличие от черного в PBM («чернила включены»).
TUPLTYPE | MAXVAL | ГЛУБИНА | комментарий |
---|---|---|---|
ЧЕРНОЕ И БЕЛОЕ | 1 | 1 | особый случай GRAYSCALE |
СЕРЫЙ | 2... 65535 | 1 | 2 байта на пиксель для MAXVALgt; 255 |
RGB | 1... 65535 | 3 | 6 байтов на пиксель для MAXVALgt; 255 |
BLACKANDWHITE_ALPHA | 1 | 2 | 2 байта на пиксель |
GRAYSCALE_ALPHA | 2... 65535 | 2 | 4 байта на пиксель для MAXVALgt; 255 |
RGB_ALPHA | 1... 65535 | 4 | 8 байт на пиксель для MAXVALgt; 255 |
Все основные типы кортежей (BLACKANDWHITE, GRAYSCALE и RGB) имеют вариант с каналом непрозрачности. Тип кортежа создается путем добавления суффикса «_ALPHA» к базовому типу кортежа.
Например, изображение с кортежем типа GRAYSCALE эквивалентно PGM (переносимая карта серого). GRAYSCALE_ALPHA с прозрачностью невозможно напрямую использовать в PGM. Спецификация разрешает MAXVAL 1 для GRAYSCALE, но это будет иметь тот же эффект, что и BLACKANDWHITE.
Примером в BMP показано в статье RGBA изображение с 4 × 2 = 8 синий, зеленый, красный и белых пикселей; полупрозрачный (0x7F) в первом нижнем ряду, непрозрачный (0xFF) во втором верхнем ряду; шестнадцатеричный. FF00007F 00FF007F 0000FF7F FFFFFF7F FF0000FF 00FF00FF 0000FFFF FFFFFFFF
в порядке BGRA. Для PAM это растровое изображение должно быть указано в порядке RGBA, меняя местами 1-й и 3-й байт в каждом пикселе. Строки BMP обычно располагаются снизу вверх, для строк PAM и PNM - сверху вниз (т.е. в этом примере 0000FFFF 00FF00FF FF0000FF FFFFFFFF 0000FF7F 00FF007F FF00007F FFFFFF7F
). Заголовок PAM для этого примера может быть:
P7 WIDTH 4 HEIGHT 2 DEPTH 4 MAXVAL 255 TUPLTYPE RGB_ALPHA ENDHDR
Механизм кортежного типа PAM допускает множество расширений. Теоретически PAM можно расширить для представления цветовых моделей, таких как CMYK.
Формат даже не ограничивается графикой, его определение позволяет использовать его для произвольных трехмерных матриц целых чисел без знака. Некоторые программы из пакета Netpbm, например pamsummcol, работают как грубые матричные арифметические процессоры и используют формат PAM таким образом.