pnmrotate [-noantialias] [-background=color] angle [pnmfile]

This program is part of Netpbm.

pnmrotate reads a PNM image as input. It rotates it by the specified
angle and produces the same kind of PNM image as output.

The input is the file named by pnmfile or Standard Input if you don't
specify pnmfile. The output goes to Standard Output.

The resulting image is a rectangle that contains the (rectangular)
input image within it, rotated with respect to its bottom edge. The
containing rectangle is as small as possible to contain the rotated
image. The background of the containing image is a single color that
pnmrotate determines to be the background color of the original image,
or that you specify explicitly.

angle is in decimal degrees (floating point), measured counter-clock-
wise. It can be negative, but it should be between -90 and 90.

You should use pamflip instead for rotations that are a multiple of a
quarter turn. It is faster and more accurate.

For rotations greater than 45 degrees you may get better results if
you first use pamflip to do a 90 degree rotation and then pnmrotate
less than 45 degrees back the other direction.

The rotation algorithm is Alan Paeth's three-shear method. Each shear
is implemented by looping over the source pixels and distributing
fractions to each of the destination pixels. This has an 'anti-alias-
ing' effect - it avoids jagged edges and similar artifacts. However,
it also means that the original colors or gray levels in the image are
modified. If you need to keep precisely the same set of colors, you
can use the -noantialias option.

The program runs faster and uses less real memory with the -noan-
tialias option. It uses a large amount of virtual memory either way,
as it keeps a copy of the input image and a copy of the output image
in memory, using 12 bytes per pixel for each. But with -noantialias,
it accesses this memory sequentially in half a dozen passes, with only
a few pages of memory at a time required in real memory.

In contrast, without -noantialias, the program's real memory working
set size is one page per input image row plus one page per output
image row. Before Netpbm 10.16 (June 2003), -noantialias had the same
memory requirement.

All options can be abbreviated to their shortest unique prefix. You
may use two hyphens instead of one to designate an option. You may
use either white space or equals signs between an option name and its



'A Fast Algorithm for General Raster Rotation' by Alan Paeth, Graphics
Interface '86, pp. 77-81.

pnmshear, pamflip, pnmquant, pnm

Copyright (C) 1989, 1991 by Jef Poskanzer.

netpbm documentation 30 August 2002 Pnmrotate User Manual(0)