Нетпбм
Разработчик(и) | Джефф Посканцер , Брайан Хендерсон, Акира Ф. Урушибата [1] |
---|---|
Первоначальный выпуск | 1988 год |
Стабильная версия | 11.02.07 [2]
/ 26 декабря 2023 г |
Репозиторий | |
Написано в | C , Perl , оболочка Unix |
Операционная система | Кросс-платформенный |
Лицензия | Разные, см . ниже |
Веб-сайт | нетпбм |
Netpbm (ранее Pbmplus) — это с открытым исходным кодом пакет графических программ и библиотеки программирования . Он используется в основном в мире Unix , где его можно найти во всех основных дистрибутивах операционных систем с открытым исходным кодом , но он также работает в Microsoft Windows , macOS и других операционных системах. [3]
Форматы файлов
[ редактировать ]Расширение имени файла |
.pbm, .pgm, .ppm, .pnm |
---|---|
Тип интернет-СМИ | |
Единый идентификатор типа (UTI) | public.pbm |
Разработано | Джефф Посканцер |
Тип формата | Формат файла изображения |
Распространено на | Портативная произвольная карта (PAM) |
Открытый формат ? | да |
В проекте Netpbm используются и определяются несколько графических форматов:
- переносимый формат растровых изображений ( PPM )
- переносимый формат карты серого ( PGM )
- переносимый формат растрового изображения ( PBM )
— это форматы файлов изображений, предназначенные для легкого обмена между платформами. Их также иногда называют переносимым форматом Anymap ( PNM ). [7] [8] не путать с соответствующим портативным форматом произвольных карт (PAM). «Магическое число» (Px) в начале файла определяет тип, а не расширение файла, хотя лучше всего использовать правильное расширение, если это возможно.
Формат PBM был изобретен Джефом Посканцером в 1980-х годах как формат, который позволял передавать монохромные растровые изображения в сообщении электронной почты как простой текст ASCII, что позволяло ему выдерживать любые изменения в форматировании текста. [8] Посканцер разработал первую библиотеку инструментов для работы с форматом PBM, Pbmplus, выпущенную в 1988 году. В основном она содержала инструменты для преобразования между PBM и другими графическими форматами. К концу 1988 года Посканцер разработал форматы PGM и PPM вместе с соответствующими инструментами и добавил их в Pbmplus. Последний выпуск Pbmplus состоялся 10 декабря 1991 года.
В 1993 году библиотека Netpbm была разработана для замены неподдерживаемой библиотеки Pbmplus. Это была просто переиздание Pbmplus с дополнениями и исправлениями, присланными людьми со всего мира. [1]
Описание
[ редактировать ]Каждый файл начинается с двухбайтового магического числа (в формате ASCII), которое определяет тип файла (PBM, PGM и PPM) и его кодировку ( ASCII /"простой" или двоичный/"необработанный"). Магическое число представляет собой заглавную букву P, за которой следует однозначное число.
Тип | Магическое число | Расширение | Цвета | |
---|---|---|---|---|
ASCII (обычный) | Двоичный (необработанный) | |||
Портативное растровое изображение | P1
|
P4
|
.pbm |
0–1 (белый и черный) |
Портативная карта GrayMap | P2
|
P5
|
.pgm |
0–255 (шкала серого), 0–65535 (шкала серого), переменный, диапазон от черного до белого. |
Портативная пиксельная карта | P3
|
P6
|
.ppm |
16 777 216 (0–255 для каждого RGB канала ), некоторая поддержка 0–65535 на канал |
Значение P7
относится к формату файла PAM , который также поддерживается библиотекой netpbm. [9]
Форматы 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 выглядит следующим образом. (Не показаны символы новой строки в конце каждой строки.):
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
[ редактировать ]Форматы PGM и PPM (как ASCII, так и двоичные версии) имеют дополнительный параметр для максимального значения (количества серого между черным и белым) после размеров X и Y и перед фактическими данными пикселей. Черный — 0, максимальное значение — белый. (Не показаны символы новой строки в конце каждой строки.)
P2 # Shows the word "FEEP" 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
Пример PPM
[ редактировать ]Это пример цветного изображения RGB, хранящегося в формате PPM. (Не показаны символы новой строки в конце каждой строки.)
P3 # "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 # This, up through the "255" line below are the header. # Everything after that is the image data: RGB triplets. # In order: red, green, blue, yellow, white, and black. 3 2 255 255 0 0 0 255 0 0 0 255 255 255 0 255 255 255 0 0 0
Двоичный формат P6 того же изображения представляет каждый цветовой компонент каждого пикселя одним байтом (то есть тремя байтами на пиксель) в следующем порядке: красный, зеленый и синий. Файл меньше, но информацию о цвете человеку труднее прочитать. Заголовок остается в формате ASCII, а аргументы по-прежнему разделяются пробелом. Информация о двоичном изображении идет после заголовка (который заканчивается пробелом).
В двоичном формате последняя строка заголовка должна иметь вид «255\n», а данные должны следовать сразу за ней; любой комментарий, добавленный после 255, будет восприниматься как начало данных изображения, а изображение будет перекошено вправо (по крайней мере, при открытии программой обработки изображений GIMP (декабрь 2022 г.)).
Формат PPM не сжимается и поэтому требует больше места и пропускной способности, чем сжатый формат. Например, приведенное выше изображение PNG ( Portable Network Graphics ) размером 192×128 имеет размер файла 166 байт. При преобразовании в изображение размером 192×128 страниц в минуту размер файла составляет 73 848 байт. Коэффициент уменьшения размера файла 100 или около того при преобразовании в PNG является типичным, если изображение представляет собой линейный рисунок; если изображение представляет собой фотографию, его лучше всего преобразовать в формат JPEG, что обеспечивает большее уменьшение размера файла.
Формат PPM обычно является промежуточным форматом, используемым для работы с изображениями перед преобразованием в более эффективный формат, например формат PNG, без какой-либо потери информации на промежуточном этапе.
Изображение, показанное выше, с использованием только 0 или максимального значения для каналов красного , зеленого и синего , также можно закодировать как:
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
Расширения
[ редактировать ]16-битный
[ редактировать ]Исходное определение двоичных форматов PGM и PPM (форматы P5 и P6) не допускало разрядности более 8 бит. Хотя формат ASCII допускает большую разрядность, он увеличивает размер файла и, таким образом, замедляет операции чтения и записи. Соответственно, многие программисты расширили формат, чтобы обеспечить более высокую разрядность. Использование более высокой разрядности сталкивается с проблемой необходимости принятия решения о порядке байтов файла. Различные реализации не пришли к единому мнению относительно того, какой порядок байтов использовать, и некоторые связывали 16-битный порядок байтов с порядком упаковки пикселей. [10] В Netpbm, фактической стандартной реализации форматов PNM, самый старший байт идет первым. [11]
32-битный
[ редактировать ]PFM (Portable Floatmap) — это неофициальное четырехбайтовое расширение стандарта IEEE 754 с плавающей запятой одинарной точности. [12] [13] [14]
- Первая строка представляет собой либо текст ASCII «PF» для цветного файла, либо «Pf» для файла в оттенках серого.
- Следующая текстовая строка ASCII содержит ширину и высоту, разделенные шестнадцатеричным символом пробела 20 или иногда шестнадцатеричным 0A (в результате получается четыре строки). После каждой строки записывается шестнадцатеричный пробельный символ 0A, а не комбинация Windows/DOS CR/LF.
- Третья текстовая строка ASCII содержит ненулевое десятичное число, которое указывает на плавающие числа с прямым порядком байтов для данных пикселей, когда они отрицательные, и с плавающей запятой с прямым порядком байтов, когда они положительные. Абсолютное значение числа указывает диапазон. Таким образом, третья строка, содержащая -1.0, указывает формат с прямым порядком байтов в диапазоне от нуля до единицы. (Комментарии не могут быть оставлены.)
После заголовка файл продолжает использовать числа с плавающей запятой для каждого пикселя, указанные в порядке слева направо и снизу вверх. Некоторые программы предлагают PF4 в качестве дополнительного расширения формата RGBA. [15]
PFM поддерживается программами Photoshop , [16] GIMP и ImageMagick . Он поддерживается де-факто эталонной реализацией netpbm. [12]
Программы
[ редактировать ]Пакет Netpbm содержит более 350 программ. [17] в названии большинства из которых есть «pbm», «pgm», «ppm», «pam» или «pnm». Например, можно использовать pamscale
уменьшить изображение на 10%, pamcomp
наложение одного изображения поверх другого, pbmtext
чтобы создать изображение текста или уменьшить количество цветов в изображении с помощью pnmquant
.
Программы созданы как минимальные строительные блоки, которые можно использовать в различных комбинациях для выполнения других задач. Пакет Netpbm, например, может использовать две последовательные программы преобразования для преобразования цветного изображения в формате GIF в файл .bmp :
giftopnm somepic.gif > somepic.ppm ppmtobmp somepic.ppm > somepic.bmp
Чаще всего это делается в виде конвейера , чтобы сэкономить время выполнения и не оставлять временный файл somepic.ppm :
giftopnm somepic.gif | ppmtobmp > somepic.bmp
Программы Netpbm часто используются в качестве промежуточных звеньев для преобразования между непонятными форматами. Например, может не существовать инструмента для преобразования дампа окна X11 ( формат XWD Macintosh ) непосредственно в файл PICT , но это можно сделать, запустив xwdtopnm
, затем ppmtopict
. (Инструменты, которые говорят, что они выводят PNM, выводят PBM, PGM или PPM. Инструменты, импортирующие PNM, будут читать любой из трех форматов.) В качестве более сложного примера, инструменты Netpbm могут конвертировать XBM 48 × 48 в Ikon и, в конечном итоге, в X-Face. . [18]
История
[ редактировать ]Формат 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, позволяющий использовать альфа-канал. [19]
Название Netpbm произошло от имени разработчиков программ, сотрудничающих через Интернет , что было примечательно в то время; операционная система NetBSD и игра NetHack получили свои названия одинаково. (В отличие от более позднего, более распространенного формата Portable Network Graphics (PNG), «сеть» в названии на самом деле не относится к самому изображению, оптимизированному для передачи по сети.)
Графический формат PAM
[ редактировать ]Расширение имени файла | .pam |
---|---|
Тип интернет-СМИ |
изображение/x-portable-Arvarymap [20] |
Разработано | Брайан Хендерсон |
Тип формата | Формат файла изображения |
Расширено с | Портативная любая карта (PNM) |
Открытый формат ? | да |
Portable Arbitrary Map ( PAM ) — это расширение старых двоичных P4...P6 графических форматов , представленных в версии netpbm 9.7 (август 2000 г.). PAM обобщает все функции PBM, PGM и PPM и обеспечивает расширения. PAM определяет два новых атрибута; глубина и тип кортежа :
- Атрибут глубины определяет количество каналов в изображении, например 1 для изображений в оттенках серого и 3 для изображений RGB.
- Атрибут типа кортежа указывает, какой тип изображения представляет файл PAM, что позволяет ему использовать старые форматы Netpbm, а также расширять его для новых применений, например прозрачности .
PAM поддерживается XnView и FFmpeg . [21] [22] Как указано в TUPLTYPE
является необязательным; однако этого требует FFmpeg.
Отличия от старых форматов
[ редактировать ]Заголовок формата файла PAM начинается с P7 и (в отличие от других форматов) заканчивается явным закрытием: «ENDHDR», за которым следует пробел. Концы строк в заголовке PAM имеют значение; для PNM концы строк представляют собой пробелы.
Не существует простой (удобочитаемой, основанной на ASCII ) версии PAM. Файлы PAM всегда являются двоичными и пытаются использовать переключатель -plain
с программами Netpbm, которые производят выходные данные PAM, появляется сообщение об ошибке.
Для черно-белой версии PAM (глубина 1, тип кортежа BLACKANDWHITE), соответствующей PBM, PAM использует один байт на пиксель вместо использования одного бита на пиксель в PBM (упаковка восьми пикселей в один байт). Кроме того, значение 1 в таком изображении PAM означает белый («свет горит»), а не черный в PBM («чернила горят»).
ТУПЛТИП | МАКСВАЛ | ГЛУБИНА | комментарий |
---|---|---|---|
ЧЕРНО-БЕЛЫЙ | 1 | 1 | особый случай СЕРОГО |
СЕРЫЙ | 2...65535 | 1 | 2 байта на пиксель для MAXVAL > 255 |
RGB | 1...65535 | 3 | 6 байт на пиксель для MAXVAL > 255 |
BLACKANDWHITE_ALPHA | 1 | 2 | 2 байта на пиксель |
GREYSCALE_ALPHA | 2...65535 | 2 | 4 байта на пиксель для MAXVAL > 255 |
RGB_АЛЬФА | 1...65535 | 4 | 8 байт на пиксель для MAXVAL > 255 |
Прозрачность
[ редактировать ]Все основные типы кортежей (BLACKANDWHITE, GRAYSCALE и RGB) имеют вариант с каналом непрозрачности . Тип кортежа создается путем добавления «_ALPHA» в качестве суффикса к базовому типу кортежа.
Например, изображение с кортежем типа GREYSCALE эквивалентно PGM (переносимая карта серого). GREYSCALE_ALPHA с прозрачностью напрямую невозможен в PGM. Спецификация допускает значение MAXVAL 1 для GRAYSCALE, но это будет иметь тот же эффект, что и BLACKANDWHITE.
в В примере статье BMP показано изображение RGBA с 4 × 2 = 8 синими, зелеными, красными и белыми пикселями; полупрозрачный (0x7F) в первом нижнем ряду, непрозрачный (0xFF) во втором верхнем ряду; шестигранник. FF00007F 00FF007F 0000FF7F FFFFFF7F FF0000FF 00FF00FF 0000FFFF FFFFFFFF
в порядке БГРА . Для 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.
Лицензирование
[ редактировать ]Netpbm состоит из сотен различных инструментов, каждый из которых имеет собственную общественную лицензию на авторские права. Анализ, проведенный разработчиком Debian Стивом Макинтайром в 2001 году, предполагает наличие в основном лицензий на свободное программное обеспечение, одну некоммерческую лицензию (несвободную) и дюжину лицензий без каких-либо лицензий (то есть также несвободных). Как упоминалось в анализе, он, очевидно, не охватывает изменения с тех пор. [23]
См. также
[ редактировать ]- Графическая библиотека GD
- ГрафикаМагия
- ИзображениеМагия
- Список команд Unix
- X PixMap (сравнение PBM и XPM)
Ссылки
[ редактировать ]- ^ Jump up to: а б «История Netpbm» . Проверено 17 марта 2010 г.
- ^ «ИЗМЕНИТЬ ИСТОРИЮ» .
- ^ Хендерсон, Брайан (2013). «Получение Netpbm» . Сорсфордж . Проверено 2 февраля 2021 г.
- ^ .pbm Тип MIME не зарегистрирован в IANA
- ^ .pgm Тип MIME не зарегистрирован в IANA
- ^ .ppm Тип MIME не зарегистрирован в IANA
- ^ Jump up to: а б .pnm MIME Тип не зарегистрирован в IANA
- ^ Jump up to: а б Мюррей, Джеймс Д.; ван Райпер, Уильям (апрель 1996 г.). Энциклопедия форматов графических файлов, второе издание . О'Рейли . ISBN 1-56592-161-5 . Проверено 27 февраля 2014 г.
- ^ «Схема формата файла PAM» .
- ^ «Руководство пользователя Pnmtotiff» . документ netpbm на SourceForge . 27 марта 2005 г.
- ^ «Справочная страница памендиана» . документ netpbm на SourceForge . 10 октября 2012 г.
- ^ Jump up to: а б «Описание формата PFM» .
- ^ «PFM (портативная плавающая карта) — просто решите проблему формата файла» .
- ^ «Документация формата PFM» . Архивировано из оригинала 31 декабря 2019 г.
- ^ «Синтетические последовательности огня HDR» .
- ^ «Форматы файлов в Adobe Photoshop» .
- ^ «Домашняя страница Netpbm» . Проверено 3 мая 2023 г.
- ^ Дайрики, Джефф. «Онлайн-конвертер X-Face» . Проверено 2 марта 2014 г.
- ^ «Спецификация формата PAM» .
- ^ Тип MIME не зарегистрирован в IANA : спецификация формата PAM
- ^ Гужеле, Пьер-Эммануэль (19 февраля 2015 г.). «XnView 2.30» . XnView . Проверено 20 февраля 2015 г.
Добавлен формат PAM
- ^ «Форматы изображений» . FFmpeg Общая документация . 2014 . Проверено 23 февраля 2014 г.
- ^ «Анализ авторских прав Netpbm в 2001 году, проведенный Стивом Макинтайром» .