PFM Format Description(5) File Formats Manual PFM Format Description(5)
NAME
PFM - PFM graphic image file format
DESCRIPTION
This document describes the PFM graphic image file format as understood
by the Netpbm converters pamtopfm(1) and pfmtopam(1).
There are multiple similar formats known as PFM in the world, none of
them authoritatively documented. The format described here is one that
Bryan Henderson deduced from a program he found somewhere that dealt
with a "PFM" format. This format appears to be the one Gimp calls PFM.
Another important PFM is used by Adobe Photoshop and appears to be iden-
tical to this except that rows are ordered from top to bottom in the
Adobe version. If you interchange images between systems that use these
two formats, it will work except that your image gets flipped upside
down. You can compensate for that with pamflip -topbottom.
The PFM format is inspired by the Netpbm formats, and you will see lots
of similarity. It is not, however, an official Netpbm format. Its goal
is not consistent with those of Netpbm formats.
The format
A PFM image is a stream of bytes. The stream consists of a header fol-
lowed immediately by a raster. These two components are described be-
low. There are no delimiters before or after the sections as described.
PFM header
The PFM header is 3 consecutive "lines" of ASCII text. After each line
is a white space character. That character is typically a newline char-
acter, hence the term "line," but doesn't have to be.
pamtopfm uses a newline in the PFM it generates.
Identifier Line
The identifier line contains the characters "PF" or "Pf". PF means it's
a color PFM. Pf means it's a grayscale PFM.
Dimensions Line
The dimensions line contains two positive decimal integers, separated by
a blank. The first is the width of the image; the second is the height.
Both are in pixels.
Scale Factor / Endianness
The Scale Factor / Endianness line is a queer line that jams endianness
information into an otherwise sane description of a scale. The line
consists of a nonzero decimal number, not necessarily an integer. If
the number is negative, that means the PFM raster is little endian.
Otherwise, it is big endian. The absolute value of the number is the
scale factor for the image.
The scale factor tells the units of the samples in the raster. You use
somehow it along with some separately understood unit information to
turn a sample value into something meaningful, such as watts per square
meter.
PFM raster
The raster is a sequence of pixels, packed one after another, with no
delimiters of any kind. They are grouped by row, with the pixels in
each row ordered left to right and the rows ordered bottom to top.
Note: This is the opposite of Netpbm formats, which order rows top to
bottom. It is also the opposite of the format Adobe Photoshop calls
PFM. See the introduction for more information on this disparity.
Each pixel consists of 1 or 3 samples, packed one after another, with no
delimiters of any kind. 1 sample for a grayscale PFM and 3 for a color
PFM (see the Identifier Line of the PFM header).
Each sample consists of 4 consecutive bytes. The bytes represent a 32
bit string, in either big endian or little endian format, as determined
by the Scale Factor / Endianness line of the PFM header. That string is
an IEEE 32 bit floating point number code. Since that's the same format
that most CPUs and compiler use, you can usually just make a program use
the bytes directly as a floating point number, after taking care of the
endianness variation.
DOCUMENT SOURCE
This manual page was generated by the Netpbm tool 'makeman' from HTML
source. The master documentation is at
http://netpbm.sourceforge.net/doc/pfm.html
netpbm documentation 27 February 2024 PFM Format Description(5)
Generated by dwww version 1.16 on Tue Dec 16 05:54:49 CET 2025.