Jump to content

Netpbm

From Wikipedia, the free encyclopedia
Netpbm
Developer(s)Jef Poskanzer,Bryan Henderson, Akira F Urushibata[1]
Initial release1988;36 years ago(1988)
Stable release
11.02.07[2]Edit this on Wikidata / 26 December 2023;6 months ago(26 December 2023)
Repository
Written inC,Perl,Unix Shell
Operating systemCross-platform
LicenseVarious, seebelow
Websitenetpbm.sourceforge.netEdit this at Wikidata

Netpbm(formerly Pbmplus) is anopen-sourcepackage of graphics programs and a programming library. It is used mainly in theUnixworld, where one can find it included in all major open-sourceoperating systemdistributions, but also works onMicrosoft Windows,macOS,and other operating systems.[3]

File formats[edit]

Portable pixmap
Filename extension
.pbm,.pgm,.ppm,.pnm
Internet media type
image/x-portable-bitmap,[4]image/x-portable-graymap,[5]image/x-portable-pixmap,[6]image/x-portable-anymap[7]
Uniform Type Identifier (UTI)public.pbm
Developed byJef Poskanzer
Type of formatImage file format
Extended toPortable Arbitrary Map (PAM)
Open format?yes

Several graphics formats are used and defined by the Netpbm project:

  • portable pixmap format (PPM)
  • portable graymap format (PGM)
  • portable bitmap format (PBM)

areimage file formatsdesigned to be easily exchanged between platforms. They are also sometimes referred to collectively as theportable anymap format(PNM),[7][8]not to be confused with the relatedportable arbitrary mapformat (PAM). The "magic number" (Px) at the beginning of a file determines the type, not the file extension, although it is best practice to use the correct extension if possible.

The PBM format was invented byJef Poskanzerin the 1980s as a format that allowed monochrome bitmaps to be transmitted within an email message as plain ASCII text, allowing it to survive any changes in text formatting.[8]Poskanzer developed the first library of tools to handle the PBM format, Pbmplus, released in 1988. It mainly contained tools to convert between PBM and other graphics formats. By the end of 1988, Poskanzer had developed the PGM and PPM formats along with their associated tools and added them to Pbmplus. The final release of Pbmplus was December 10, 1991.

In 1993, the Netpbm library was developed to replace the unmaintained Pbmplus. It was simply a repackaging of Pbmplus with additions and fixes submitted by people all over the world.[1]

Description[edit]

Each file starts with a two-bytemagic number(in ASCII) that identifies the type of file it is (PBM, PGM, and PPM) and its encoding (ASCII/ "plain" or binary/ "raw" ). The magic number is a capital P followed by a single-digit number.

Type Magic number Extension Colors
ASCII (plain) Binary (raw)
Portable BitMap P1 P4 .pbm 0–1 (white & black)
Portable GrayMap P2 P5 .pgm 0–255 (gray scale), 0–65535 (gray scale), variable, black-to-white range
Portable PixMap P3 P6 .ppm 16777216(0–255 for eachRGBchannel), some support for 0-65535 per channel

A value ofP7refers to thePAMfile format that is covered as well by the netpbm library.[9]

The ASCII ( "plain" ) formats allow for human readability and easy transfer to other platforms; the binary ( "raw" ) formats are more efficient in file size but may have native byte-order issues.

In the binary formats, PBM uses 1 bit per pixel, PGM uses 8 or 16 bits per pixel, and PPM uses 24 bits per pixel: 8 for red, 8 for green, 8 for blue. Some readers and writers may support 48 bits per pixel (16 each for R,G,B), but this is still rare.

Conventionally PGM stores values in linearcolor space,but depending on the application, it can often use eithersRGBor a simplifiedgammarepresentation. The file data doesn't state which color space it is using, and must be chosen by the user or other software. 16-bit PGM almost always is stored as linear, as gamma correction is usually advantageous only in 8-bit formats.

Usually, 8-bit PPM format stores colors in a nonlinear format, conventionally CIE Rec. 709 for red, green, and blue, adjusted by the CIE Rec. 709 gamma transfer function. However it is very common to store color using sRGB color space, or sometimes using linearcolor space.There is no metadata in the file to indicate which format is being used.

PBM example[edit]

A simple example of the PBM format is as follows. (Not shown are the newline character(s) at the end of each line.):

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

The stringP1identifies the file format. Thenumber signintroduces a comment. The next two numbers give the width and the height. Then follows the matrix with the pixel values (in the monochrome case here, only zeros and ones).

It is not required that pixels are nicely lined up, the format ignores whitespaces and linefeeds in the data section, although it's recommended that no line is longer than 76 characters. The following displays the same image:

P1
# This is an example bitmap of the letter "J"
6 10
000010000010000010000010000010000010100010011100000000000000

Here is the resulting image:

Here it is again magnified 20 times:

A value of 0 signifies a white pixel, and a 1 signifies a black pixel. This differs from the other formats, where higher values signify brighter pixels.

The P4 binary format of the same image represents each pixel with a single bit, packing 8 pixels per byte, with the first pixel as the most significant bit. Extra bits are added at the end of each row to fill a whole byte.

PGM example[edit]

The PGM and PPM formats (both ASCII and binary versions) have an additional parameter for the maximum value (numbers of grey between black and white) after the X and Y dimensions and before the actual pixel data. Black is 0 and max value is white. (Not shown are the newline character(s) at the end of each line.)

Example (magnified)
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 example[edit]

This is an example of a color RGB image stored in PPM format. (Not shown are the newline character(s) at the end of each line.)

Image (magnified)
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

The P6 binary format of the same image represents each color component of each pixel with one byte (thus three bytes per pixel) in the order red, green, then blue. The file is smaller, but the color information is more difficult to read by humans. The header remains in ASCII and the arguments are still separated by a whitespace. The binary image information comes after the header (which ends with a whitespace).

In the binary format, last headerline must be like "255\n", with data immediately following it; any comment added after 255 will be taken as the start of image data, and the image will be skewed to the right (at least when opened by the image-manipulation program GIMP (December 2022)).

The PPM format is not compressed, and thus requires more space and bandwidth than a compressed format would. For example, the above 192×128 PNG (Portable Network Graphics) image has a file size of 166 bytes. When converted to a 192×128 PPM image, the file size is 73,848 bytes. Filesize reduction factor 100 or so when converting to png is typical if the image is a line drawing; if the image is a photo, it is best converted to jpeg, which yields a greater filesize reduction.

The PPM format is generally an intermediate format used for image work before converting to a more efficient format, for example the PNG format, without any loss of information in the intermediate step.

The image shown above using only0or the maximal value for thered-green-blue channels can be also encoded as:

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

White space including line ends and comment lines is syntactically equivalent to a single space within the PNM headers. For the plain formats P1...P3 this also affects the pixmap lines; in fact lines should be limited to 70 characters:

P3 3 2 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 0

Extensions[edit]

16-bit[edit]

The original definition of the PGM and the PPM binary formats (the P5 and P6 formats) did not allow bit depths greater than 8 bits. While the ASCII format can accommodate greater bit depths, it increases file size and thus slows read and write operations. Accordingly, many programmers extended the format to allow higher bit depths. Using higher bit depths encounters the problem of having to decide on theendiannessof the file. The various implementations did not agree on which byte order to use, and some connected the 16-bit endianness to the pixel packing order.[10]In Netpbm, thede factostandard implementation of the PNM formats, the most significant byte is first.[11]

32-bit[edit]

The PFM (Portable Floatmap) is the unofficial four byte IEEE 754 single precision floating point extension.[12][13][14]

  1. The first line is either the ASCII text "PF", for a color file, or "Pf", for a grey-scale file.
  2. The next ASCII text line contains the width and height, separated by the space character hex 20 or sometimes with hex 0A (resulting in four lines). After each line a white space character hex 0A is written and not the Windows/DOS CR/LF combination.
  3. The third ASCII text line holds a nonzero decimal number that indicates little-endian floats for the pixel data when negative and big-endian floats when positive. The absolute value of the number indicates the range. So the third line containing -1.0 indicates little-endian format in range zero to one. (No comments may follow.)

After the header the file proceeds with floating point numbers for each pixel, specified in left-to-right, bottom-to-top order. Some programs suggest PF4 as an additional extension for the RGBA format.[15]

PFM is supported by the programsPhotoshop,[16]GIMP,andImageMagick.It is supported by thede factoreference implementation netpbm.[12]

Programs[edit]

The Netpbm package contains over 350 programs,[17]most of which have "pbm", "pgm", "ppm", "pam", or "pnm" in their names. For example, one might usepamscaleto shrink an image by 10%,pamcompto overlay one image on top of another,pbmtextto create an image of text, or reduce the number of colors in an image withpnmquant.

The programs are designed to be minimal building blocks that can be used in various combinations to do other things. The Netpbm package can, for example, use two successive conversion programs to turn a color picture in the GIF format into a.bmpfile:

giftopnm somepic.gif > somepic.ppm
ppmtobmp somepic.ppm > somepic.bmp

This is more commonly done as apipeline,to save execution time and to avoid leaving a temporarysomepic.ppmfile around:

giftopnm somepic.gif | ppmtobmp > somepic.bmp

The Netpbm programs are frequently used as intermediates to convert between obscure formats. For instance, there may be no tool to convert an X11 window dump (XWDformat) directly to a MacintoshPICTfile, but one can do this by runningxwdtopnm,thenppmtopict.(Tools which say that they output PNM output either PBM, PGM, or PPM. Tools importing PNM will read any of the three formats.) As a more complex example, Netpbm tools can convert 48×48XBMtoIkonand eventuallyX-Face.[18]

History[edit]

The PBM (black and white) format was invented byJef Poskanzerin the mid-1980s. At the time, there was no standard, reliable way to send binary files in email, and attempting to send anything other than 7-bitASCIIin email often resulted indata corruption.PBM was designed to allow images to be sent via email without being corrupted. Poskanzer released the forerunner of Netpbm, calledPbmplusin 1988. By the end of 1988, Poskanzer had developed the PGM (greyscale) and PPM (color) formats and released them with Pbmplus.

The last release of Pbmplus was on December 10, 1991. Poskanzer never released any further updates, and in 1993, Netpbm was developed to replace it. At first, it was nothing more than a renamed release of Pbmplus, but updates continued to occur until 1995 when the package again became abandoned. In 1999, the Netpbm package was picked up by its present maintainer, Bryan Henderson.

In 2000, PAM was added to the file formats of the Netpbm library allowing an Alpha channel.[19]

The name Netpbm came from the program developers collaborating over theInternet,which was notable at the time; theNetBSDoperating system andNetHackgame got their names similarly. (Unlike with the later, more widespreadPortable Network Graphics(PNG) format, the "net" in the name is not actually in reference to the image itself being optimized for transfer over a network.)

PAM graphics format[edit]

Portable Arbitrary Map
Filename extension
.pam
Internet media type
image/x-portable-arbitrarymap[20]
Developed byBryan Henderson
Type of formatImage file format
Extended fromPortable aNy Map (PNM)
Open format?yes

Portable Arbitrary Map(PAM) is an extension of the older binaryP4...P6graphics formats,introduced with netpbm version 9.7 (August 2000). PAM generalises all features of PBM, PGM, and PPM, and provides for extensions. PAM defines two new attributes;depthandtupletype:

  1. Thedepthattribute defines the number of channels in the image, such as 1 for greyscale images and 3 for RGB images.
  2. Thetuple typeattribute specifies what kind of image the PAM file represents, thus enabling it to stand for the older Netpbm formats, as well as to be extended to new uses, e.g.,transparency.

PAM is supported byXnViewandFFmpeg.[21][22]As specified theTUPLTYPEis optional; however, FFmpeg requires it.

Differences from the older formats[edit]

The header for the PAM file format begins with P7, and (unlike in the other formats) ends in an explicit close: "ENDHDR" followed by a whitespace. Line ends in a PAM header are significant; for PNM, line ends are whitespace.

There is no plain (human-readable,ASCII-based) version of PAM. PAM files are always binary, and attempts to use the switch-plainwith Netpbm programs that produce PAM output results in an error message.

For the black-and-white version of PAM (depth 1, tuple type BLACKANDWHITE), corresponding to PBM, PAM uses one byte per pixel, instead of PBM's use of one bit per pixel (packing eight pixels in one byte). Also, the value 1 in such a PAM image stands for white ( "light on" ), as opposed to black in PBM ( "ink on" ).

PAM tuple types
TUPLTYPE MAXVAL DEPTH comment
BLACKANDWHITE 1 1 special case of GRAYSCALE
GRAYSCALE 2...65535 1 2 bytes per pixel for MAXVAL > 255
RGB 1...65535 3 6 bytes per pixel for MAXVAL > 255
BLACKANDWHITE_ALPHA 1 2 2 bytes per pixel
GRAYSCALE_ALPHA 2...65535 2 4 bytes per pixel for MAXVAL > 255
RGB_ALPHA 1...65535 4 8 bytes per pixel for MAXVAL > 255

Transparency[edit]

All of the basic tuple types (BLACKANDWHITE, GRAYSCALE, and RGB) have a variant with anopacity channel.The tuple type is created by appending "_ALPHA" as a suffix to the base tuple type.

For example, an image with a tuple type of GRAYSCALE is equivalent to PGM (portable graymap). GRAYSCALE_ALPHA with transparency is not directly possible in PGM. The specification permits MAXVAL 1 for GRAYSCALE, but it would have the same effect as BLACKANDWHITE.

Anexamplein theBMParticle shows anRGBAimage with 4×2=8 blue, green, red, and white pixels; half transparent (0x7F) in the first lower row, opaque (0xFF) in the second upper row; hex.FF00007F 00FF007F 0000FF7F FFFFFF7F FF0000FF 00FF00FF 0000FFFF FFFFFFFFinBGRAorder. For PAM, this bitmap has to be given inRGBAorder, swapping the 1st and 3rd byte in each pixel. BMP rows are typically arranged bottom-up, for PAM and PNM rows are given top-down (i.e. for this example0000FFFF 00FF00FF FF0000FF FFFFFFFF 0000FF7F 00FF007F FF00007F FFFFFF7F). The PAM header for this example could be:

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
WIDTH 4
HEIGHT 2
DEPTH 4
MAXVAL 255
TUPLTYPE RGB_ALPHA
ENDHDR

Extensions[edit]

PAM's tuple-type mechanism allows for many extensions. In theory, PAM can be extended to represent color models such as CMYK.

The format is not even limited to graphics, its definition allows it to be used for arbitrary three-dimensional matrices of unsigned integers. Some programs of the Netpbm package, for examplepamsummcol,function as crude matrix arithmetic processors and use the PAM format this way.

Licensing[edit]

Netpbm consists of hundreds of different tools, each offered with a public copyright license of its own. An analysis byDebiandeveloper Steve McIntyre from 2001 suggests mostly free software licenses, one non-commercial license (non-free) and a dozen without any license offered (thus also non-free). As mentioned in the analysis, it obviously doesn't cover changes since.[23]

See also[edit]

References[edit]

  1. ^ab"Netpbm history".RetrievedMarch 17,2010.
  2. ^"CHANGE HISTORY".
  3. ^Henderson, Bryan (2013)."Getting Netpbm".Sourceforge.Retrieved2 February2021.
  4. ^.pbmMIMEtype notregisteredatIANA
  5. ^.pgmMIMEtype notregisteredatIANA
  6. ^.ppmMIMEtype notregisteredatIANA
  7. ^ab.pnmMIMEtype notregisteredatIANA
  8. ^abMurray, James D.; van Ryper, William (April 1996).Encyclopedia of Graphics File Formats, Second Edition.O'Reilly.ISBN1-56592-161-5.Retrieved2014-02-27.
  9. ^"Layout of the PAM file format".
  10. ^"Pnmtotiff User Manual".netpbm doc at SourceForge.27 March 2005.
  11. ^"pamendian man page".netpbm doc at SourceForge.10 October 2012.
  12. ^ab"PFM Format Description".
  13. ^"PFM (Portable Float Map) - Just Solve the File Format Problem".
  14. ^"PFM Format Documentation".Archivedfrom the original on 2019-12-31.
  15. ^"Synthetic HDR Fire Sequences".
  16. ^"File formats in Adobe Photoshop".
  17. ^"Netpbm home page".RetrievedMay 3,2023.
  18. ^Dairiki, Jeff."Online X-Face Converter".Retrieved2014-03-02.
  19. ^"PAM format specification".
  20. ^MIMEtype not registered atIANA:PAM format specification
  21. ^Gougelet, Pierre-Emmanuel (2015-02-19)."XnView 2.30".XnView.Retrieved2015-02-20.PAM format added
  22. ^"Image Formats".FFmpegGeneral Documentation.2014.Retrieved2014-02-23.
  23. ^"2001 analysis of Netpbm copyrights done by Steve McIntyre".

External links[edit]