Из Википедии, бесплатной энциклопедии
  (Перенаправлено из формата Netpbm )
Перейти к навигации Перейти к поиску

Netpbm (ранее Pbmplus) - это пакет графических программ и библиотеки программирования с открытым исходным кодом . Он используется в основном в мире Unix , где его можно найти включенным во все основные дистрибутивы операционных систем с открытым исходным кодом , но он также работает в Microsoft Windows , macOS и других операционных системах. [2]

Форматы файлов [ править ]

В проекте Netpbm используются и определяются несколько графических форматов. Портативный формат пиксельная ( PPM ), то портативный формат graymap ( PGM ) и формат портативных растровое изображение ( РВМ ) являются форматы файлов изображений , предназначенных для быть легко обменены между платформами. Их также иногда называют портативным форматом anymap ( PNM ), [6] [7], чтобы не путать с родственной портативной произвольной картой.формат (PAM). «Магическое число» (Px) в начале файла определяет тип, а не расширение файла, хотя лучше всего использовать правильное расширение, если это возможно.

Формат PBM был изобретен Джефом Посканцером в 1980-х годах как формат, который позволял передавать монохромные растровые изображения в сообщении электронной почты в виде простого текста ASCII, что позволяло сохранять любые изменения в форматировании текста. [7] Посканцер разработал первую библиотеку инструментов для работы с форматом PBM, Pbmplus, выпущенную в 1988 году. Она в основном содержала инструменты для преобразования между PBM и другими графическими форматами. К концу 1988 года Poskanzer разработал форматы PGM и PPM вместе с соответствующими инструментами и добавил их в Pbmplus. Последний выпуск Pbmplus состоялся 10 декабря 1991 года.

В 1993 году была разработана библиотека Netpbm для замены не поддерживаемого Pbmplus. Это была просто переупаковка Pbmplus с дополнениями и исправлениями, присланными людьми со всего мира. [1]

Описание [ править ]

Каждый файл начинается с двухбайтового магического числа (в ASCII), которое определяет тип файла (PBM, PGM и PPM) и его кодировку ( ASCII / "простой" или двоичный / "необработанный"). Магическое число - это заглавная буква P, за которой следует однозначное число.

Значение P7относится к формату файла PAM , который также поддерживается библиотекой netpbm. [8]

Форматы ASCII ("простые") обеспечивают удобочитаемость и простой перенос на другие платформы; двоичные («сырые») форматы более эффективны по размеру файла, но могут иметь собственные проблемы с порядком байтов.

В двоичных форматах PBM использует 1 бит на пиксель, PGM использует 8 или 16 бит на пиксель, а PPM использует 24 бита на пиксель: 8 для красного, 8 для зеленого, 8 для синего. Некоторые читатели и писатели могут поддерживать 48 бит на пиксель (по 16 для R, G, B), но это все еще редко.

Обычно PGM хранит значения в линейном цветовом пространстве , но в зависимости от приложения часто использует sRGB или упрощенное гамма- представление. Данные файла не хранят информацию о том, какое цветовое пространство они используют, и должны выбираться пользователем или другим программным обеспечением. 16-битный PGM почти всегда сохраняется как линейный, так как гамма-коррекция обычно выгодна только в 8-битных форматах.

Обычно 8-битный формат PPM хранит цвета в нелинейном формате, обычно CIE Rec. 709 для красного, зеленого и синего, скорректировано CIE Rec. 709 передаточная функция гаммы. Однако очень часто цвет хранится с использованием цветового пространства sRGB или иногда с использованием линейного цветового пространства . В файле нет метаданных, указывающих, какой формат используется.

Пример PBM [ править ]

Вот простой пример формата PBM (в конце каждой строки есть символ новой строки):

P1# Это пример растрового изображения буквы "J"6 100 0 0 0 1 00 0 0 0 1 00 0 0 0 1 00 0 0 0 1 00 0 0 0 1 00 0 0 0 1 01 0 0 0 1 00 1 1 1 0 00 0 0 0 0 00 0 0 0 0 0

Строка P1 определяет формат файла. Знак числа вводит комментарий. Следующие два числа указывают ширину и высоту. Далее следует матрица со значениями пикселей (здесь в монохромном случае только нули и единицы).

Необязательно, чтобы пиксели были хорошо выстроены в линию, формат игнорирует пробелы и перевод строки в разделе данных, хотя рекомендуется, чтобы длина строки не превышала 76 символов. Ниже показано то же изображение:

P1# Это пример растрового изображения буквы "J"6 10000010000010000010000010000010000010100010011100000000000000

Вот получившееся изображение:

Вот оно снова увеличено в 20 раз:

Обратите внимание, что 0 означает белый пиксель, а 1 означает черный пиксель. Это контрастирует с другими форматами, где более высокие значения означают более яркие пиксели.

Двоичный формат P4 того же изображения представляет каждый пиксель одним битом, упаковывая 8 пикселей на байт, причем первый пиксель является самым старшим битом. Дополнительные биты добавляются в конце каждой строки, чтобы заполнить весь байт.

Пример PGM [ править ]

Форматы PGM и PPM (как ASCII, так и двоичные версии) имеют дополнительный параметр для максимального значения (числа серого между черным и белым) после размеров X и Y и перед фактическими данными пикселей. Черный - 0, максимальное значение - белое. В конце каждой строки есть символ новой строки.

Пример (увеличено)
P2# Показывает слово "FEEP" (пример из справочной страницы Netpbm на PGM)24 7150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 00 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 00 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 00 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 00 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Пример PPM [ править ]

Это пример цветного изображения RGB, сохраненного в формате PPM. В конце каждой строки есть символ новой строки.

Изображение (увеличенное)
P33 2255# Часть выше - это заголовок# "P3" означает, что это цветное изображение RGB в ASCII.# "3 2" - ширина и высота изображения в пикселях.# "255" - максимальное значение для каждого цвета# Часть ниже - данные изображения: триплеты RGB255 0 0 # красный 0 255 0 # зеленый 0 0 255 # синий255 255 0 # желтый255 255 255 # белый 0 0 0 # черный

Двоичный формат P6 того же изображения представляет каждую цветовую составляющую каждого пикселя одним байтом (то есть тремя байтами на пиксель) в следующем порядке: красный, зеленый, затем синий. Файл меньше, но информация о цвете трудна для чтения людьми. Заголовок остается в формате ASCII, а аргументы по-прежнему разделяются пробелом. Информация о двоичном изображении идет после заголовка (который заканчивается пробелом).

Формат PPM не сжимается и, следовательно, требует больше места и пропускной способности, чем сжатый формат. Например, указанное выше изображение PNG ( переносимая сетевая графика ) 192 × 128 имеет размер файла 166 байт. При преобразовании в изображение 192 × 128 PPM размер файла составляет 73 848 байт. Формат PPM обычно является промежуточным форматом, используемым для работы с изображениями перед преобразованием в более эффективный формат, например формат PNG, без какой-либо потери информации на промежуточном этапе.

Изображение , показанное выше , с использованием только 0 или максимального значения для г Ed - г reen- б LUE каналы могут быть также закодированы как:

P3# То же изображение шириной 3 и высотой 2,# используя 0 или 1 для каждого цвета (красный, зеленый, синий)3 2 11 0 0 0 1 0 0 0 11 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

16-битные расширения [ править ]

Первоначальное определение двоичных форматов PGM и PPM (форматы P5 и P6) не допускало битовой глубины более 8 бит. Хотя формат ASCII может поддерживать большую битовую глубину, он увеличивает размер файла и, таким образом, замедляет операции чтения и записи. Соответственно, многие программисты расширили формат, чтобы обеспечить более высокую битовую глубину. Использование более высоких битовых глубин сталкивается с проблемой необходимости определять порядок байтов файла. Различные реализации не могли договориться о том, какой порядок байтов использовать, и некоторые связывали 16-битный порядок байтов с порядком упаковки пикселей. [9] В Netpbm , де-факто стандартной реализации форматов PNM, старший байт является первым. [10]

32-битные расширения [ править ]

PFM (Portable Floatmap) - это неофициальное четырехбайтовое расширение IEEE 754 с плавающей запятой одинарной точности. [11] [12] [13]Цветной файл идентифицируется текстом ASCII «PF» в первой строке заголовка и шкалой серого - «Pf». Следующая строка текста ASCII содержит ширину и высоту, разделенные шестнадцатеричным символом пробела 20 и иногда шестнадцатеричным 0A (в результате получается четыре строки). После каждой строки записывается шестнадцатеричный символ пробела 0A, а не комбинация Windows / DOS CR / LF. Третья текстовая строка ASCII содержит ненулевое десятичное число, которое указывает, что для данных пикселей используется обратный порядок байтов с обратным порядком байтов, а при положительном - с прямым порядком байтов. Абсолютное значение числа указывает диапазон. Таким образом, третья строка, содержащая -1.0, указывает на прямой порядок байтов в диапазоне от нуля до единицы. Нет комментариев. После заголовка файл переходит к числам с плавающей запятой для каждого пикселя, указанного в порядке слева направо, снизу вверх.Некоторые программы предлагают PF4 как дополнительное расширение для формата RGBA.[14]

Поддерживается программами Photoshop [15] и Gimp.

Программы [ править ]

Netpbm содержит более 220 отдельных программ в пакете, большинство из которых имеют в именах «pbm», «pgm», «ppm», «pam» или «pnm». Например, можно использовать pamscale для уменьшения изображения на 10%, pamcomp для наложения одного изображения поверх другого, pbmtext для создания изображения текста или уменьшения количества цветов в изображении с помощью pnmquant .

Программы разработаны как минимальные строительные блоки, которые можно использовать в различных комбинациях для других целей. Пакет Netpbm может, например, использовать две последовательные программы преобразования для преобразования изображения в формате PBM в файл .bmp :

pgmtoppm "#FFFFFF" somepic.pbm> somepic.ppmppmtobmp somepic.ppm> somepic.bmp

Чаще это делается в виде конвейера , чтобы сэкономить время выполнения и не оставлять временный файл somepic.ppm вокруг:

pgmtoppm "#FFFFFF" somepic.pbm | ppmtobmp> somepic.bmp

Программы Netpbm часто используются как промежуточные звенья для преобразования малоизвестных форматов. Например, может не быть инструмента для преобразования дампа окна X11 ( формат XWD ) непосредственно в файл Macintosh PICT , но это можно сделать, запустив xwdtopnm , а затем ppmtopict . (Инструменты, которые говорят, что они выводят вывод PNM, либо PBM, PGM или PPM. Инструменты, импортирующие PNM, будут читать любой из трех форматов.) В качестве более сложного примера инструменты Netpbm могут конвертировать 48 × 48 XBM в Ikon и, в конечном итоге, X-Face . [16]

История [ править ]

Формат 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, позволяющий использовать альфа-канал. [17]

Название Netpbm произошло от разработчиков программы, сотрудничавших через Интернет , что было примечательно в то время; NetBSD операционной системы и NetHack игры получили свои имена аналогично. (В отличие от более позднего, более распространенного формата Portable Network Graphics (PNG), «net» в названии фактически не относится к самому изображению, которое оптимизируется для передачи по сети.)

Графический формат PAM [ править ]

Portable Arbitrary Map ( PAM ) - это расширение старых двоичных графических форматов P4 ... P6 . PAM обобщает все функции PBM, PGM и PPM и предусматривает расширения. PAM определяет два новых атрибута; глубина и тип кортежа :

  1. Глубина атрибут определяет количество каналов в изображении, например, 1 для полутоновых изображений и 3 для RGB изображений.
  2. В тип кортежа атрибут определяет , какой образ файл PAM представляет, таким образом , позволяя ему стоять на старых форматов Netpbm, а также распространяться на новые виды использования, например, прозрачность .

PAM поддерживается XnView и FFmpeg . [19] [20] Как указано, TUPLTYPEэто необязательно; однако FFmpeg требует этого.

Отличия от старых форматов [ править ]

Заголовок для формата файла PAM начинается с P7 и (в отличие от других форматов) заканчивается явным закрытием: ENDHDR. Концы строк в заголовке PAM имеют значение; для PNM концы строк - пробелы.

Не существует простой (удобочитаемой, основанной на ASCII ) версии PAM. Файлы PAM всегда являются двоичными, и попытки использовать переключатель -plainс программами Netpbm, которые производят выходные данные PAM, приводят к сообщению об ошибке.

Для черно-белой версии PAM (глубина 1, тип кортежа BLACKANDWHITE), соответствующей PBM, PAM использует один байт на пиксель вместо использования PBM одного бита на пиксель (упаковка восьми пикселей в один байт). Кроме того, значение 1 в таком изображении PAM обозначает белый («свет включен»), в отличие от черного в PBM («чернила включены»).

Прозрачность [ править ]

Все основные типы кортежей (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 для этого примера может быть:

0,0: blue 0000FF FF0,1: green 00FF00 FF0,2: red FF0000 FF0,3: white FFFFFF FF1,0: blue 0000FF 7F, half transparent1,1: green 00FF00 7F, half transparent1,2: red FF0000 7F, half transparent1,3: white FFFFFF 7F, half transparent
P7ШИРИНА 4ВЫСОТА 2ГЛУБИНА 4MAXVAL 255TUPLTYPE RGB_ALPHAENDHDR

Расширения [ править ]

Механизм кортежного типа PAM допускает множество расширений. Теоретически PAM можно расширить для представления цветовых моделей, таких как CMYK.

Формат даже не ограничивается графикой, его определение позволяет использовать его для произвольных трехмерных матриц целых чисел без знака. Некоторые программы пакета Netpbm, например pamsummcol , функционируют как грубые матричные арифметические процессоры и используют формат PAM таким образом.

См. Также [ править ]

  • Графическая библиотека GD
  • ГрафикаMagick
  • ImageMagick
  • Список команд Unix
  • X PixMap (сравнение PBM и XPM)

Ссылки [ править ]

  1. ^ a b "История Netpbm" . Проверено 17 марта 2010 года .
  2. ^ Хендерсон, Брайан. "Получение Netpbm" . Sourceforge . Проверено 2 февраля 2021 года .
  3. ^ .pbm Тип MIME не зарегистрирован в IANA
  4. ^ .pgm Тип MIME не зарегистрирован в IANA
  5. ^ .ppm Тип MIME не зарегистрирован в IANA
  6. ^ a b .pnm MIME- тип, не зарегистрированный в IANA
  7. ^ a b Мюррей, Джеймс Д.; ван Райпер, Уильям (апрель 1996 г.). «Энциклопедия форматов графических файлов, второе издание» . О'Рейли . ISBN 1-56592-161-5. Проверено 27 февраля 2014 .
  8. ^ "Макет формата файла PAM" .
  9. ^ "Руководство пользователя Pnmtotiff" . netpbm doc на SourceForge . 27 марта 2005 г.
  10. ^ "Памендская страница руководства" . netpbm doc на SourceForge . 10 октября 2012 г.
  11. ^ "Описание формата PFM" .
  12. ^ «PFM (Portable Float Map) - просто решите проблему формата файла» .
  13. ^ «Документация формата PFM» . Архивировано из оригинала на 2019-12-31.
  14. ^ «Синтетические последовательности огня HDR» .
  15. ^ «Форматы файлов в Adobe Photoshop» .
  16. ^ Джефф Дайрики. «Онлайн конвертер X-Face» . Проверено 2 марта 2014 .
  17. ^ http://netpbm.sourceforge.net/doc/pam.html
  18. ^ Тип MIME не зарегистрирован в IANA : спецификация формата PAM
  19. ^ Пирр Эммануэль Гогелет (2015-02-19). «XnView 2.30» . XnView . Проверено 20 февраля 2015 . Добавлен формат PAM
  20. ^ «Форматы изображений» . Общая документация FFmpeg . 2014 . Проверено 23 февраля 2014 .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • pfm: формат файла графического изображения PFM в понимании Netpbm
  • Примеры файлов ppm в различных форматах