Netpbm format

related topics
{system, computer, user}
{math, number, function}
{@card@, make, design}
{car, race, vehicle}

The phrase Netpbm format commonly refers to any or all of the members of a set of closely related graphics formats used and defined by the Netpbm project. The portable pixmap format (PPM), the portable graymap format (PGM) and the portable bitmap format (PBM) are image file formats originally designed to be easily exchanged between platforms. They are also sometimes referred to collectively as the portable anymap format (PNM).[1]

Contents

History

The PBM format was invented by Jef Poskanzer in the 1980s as a format for monochrome bitmaps that could be transmitted within an email message as plain ASCII text, allowing it to survive any changes in text formatting.

The first library of tools to handle the PBM format was Pbmplus. It was developed by the format's creator and released in 1988. It mainly contained tools to convert between PBM and other graphics formats. By the end of 1988, Jef 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.[2]

File format description

Each format differs in what colors it is designed to represent:

  • PBM is for bitmaps (black and white, no grays)
  • PGM is for grayscale
  • PPM is for "pixmaps" which represent full RGB color.

Each file starts with a two-byte file descriptor (in ASCII) that explains the type of file it is (PBM, PGM, and PPM) and its encoding (ASCII or binary). The descriptor is a capital P followed by a single digit number.

The ASCII based formats allow for human-readability and easy transport to other platforms (so long as those platforms understand ASCII), while the binary formats are more efficient both at saving space in the file, as well as being easier to parse due to the lack of whitespace.

When using the binary formats, PBM uses 1 bit per pixel, PGM uses 8 bits per pixel, and PPM uses 24 bits per pixel: 8 for red, 8 for green, 8 for blue.

PBM example

A simple example of the PBM format is as follows (There is a newline character 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 string P1 identifies the file format. The hash sign introduces 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).

Here is the resulting image: Example of ASCII-art turned into a bitmap.pbm.png

Here it is again magnified 20 times:

Example of ASCII-art turned into a bitmap scale20.pbm.png

[edit] PGM example

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. There is a newline character at the end of each line.

P2
# Shows the word "FEEP" (example from Netpbm main 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

Example (magnified):

Feep netbpm p2 pgm example.png

[edit] PPM example

This is an example of a color RGB image stored in PPM format. There is a newline character at the end of each line.

P3
# The P3 means colors are in ASCII, then 3 columns and 2 rows,
# then 255 for max color, then RGB triplets
3 2
255
255   0   0     0 255   0     0   0 255
255 255   0   255 255 255     0   0   0

The image (magnified): Tiny6pixel.png

The P6 binary format of the same image will store each color component of each pixel with one byte (thus three bytes per pixel) in the order red, green, then blue. The file will be smaller but the color information will not be readable by humans.

The PPM format is not compressed and thus requires more space and bandwidth than a compressed format would require. For example, the above 192x128 PNG image has a file size of 187 bytes. When converted to a 192x128 PPM image, the file size is 73848 bytes. The PPM format is generally an intermediate format used for image work before converting to a more efficient format, for example the PNG (Portable Network Graphics) format, without any loss of information in the intermediate step.

Full article ▸

related documents
Analytical engine
ScriptBasic
XPCOM
Monolithic kernel
Debugger
Remote procedure call
Parasitic computing
IBM 1620 Model I
Run-length encoding
Access control list
Adding machine
LZ77 and LZ78
Microsoft BASIC
Pentium FDIV bug
Server-side scripting
Creator code
Ed (text editor)
Portable Distributed Objects
Wikipedia:Federal Standard 1037C terms/computer programming terms
386BSD
Nautilus (file manager)
Adapter pattern
Pseudonymous remailer
Mutual exclusion
Dual in-line package
Visual DialogScript
Application binary interface
GW-BASIC
PureBasic
AutoLISP