pnmscale
scale a portable anymap
see also :
pnmscalefixed - pamstretch - pbmreduce - pnmenlarge - pnmsmooth - pnmcut
Synopsis
pnmscale
scale_factor [pnmfile]
pnmscale -reduce reduction_factor
[pnmfile]
pnmscale [{-xsize=cols |
-width=cols | -xscale=factor}]
[{-ysize=rows | -height=rows |
-yscale=factor}] [pnmfile]
pnmscale -xysize cols rows [pnmfile]
pnmscale -pixels n [pnmfile]
Miscellaneous
options:
-verbose -nomix
Minimum unique
abbreviation of option is acceptable. You may use double
hypens instead of single hyphen to denote options. You may
use white space in place of the equals sign to separate an
option name from its value.
add an example, a script, a trick and tips
examples
source
jpegtopnm $SRCDIR/$file | \
pnmscale $FACTOR | \
pnmtojpeg > $file
done
for file in `cd $SRCDIR; ls *.png`
do
pngtopnm $SRCDIR/$file | \
pngtopnm $SRCDIR/$file | \
pnmscale $FACTOR | \
pnmtopng > $file
done
source
anytopnm "$1" 2> /dev/null |
pnmscale -xsize `tput
cols` | ppmtopgm | pgmtopbm | pbmtoascii
source
cat _err$$ | (rm
_err$$; pnmscale 0.4) | ppmquant 32 | pnmtopng -compression 9
source
tifftopnm < sleeve.ppm | $norm |
pnmscale -xsize 700 | cjpeg \
-quality 90 > "$dir/display$suf.jpg"
tifftopnm < sleeve.ppm | $norm |
pnmscale -xsize 200 | pnmtopng \
tifftopnm < sleeve.ppm | $norm |
pnmscale -xsize 200 | pnmtopng \
> thumbnail$suf.png
tifftopnm < sleeve.ppm | $norm |
pnmscale -xsize 100 | pnmtopng \
source
pngtopnm | \
pnmscale -xscale 0.5 -yscale 0.5 | \
pnmtopng > $@
%.fig: %.dot
dot $< -Tfig -o $@
clean:
description
Reads a PBM,
PGM, or PPM image as input, scales it by the specified
factor or factors and produces a PGM or PPM image as output.
If the input file is in color (PPM), the output will be too,
otherwise it will be grayscale (PGM). This is true even if
the input is a black and white bitmap (PBM), because the
process of scaling can turn a combination of black and white
pixels into a gray pixel.
If you want PBM
output, use pgmtopbm to convert
pnmscale’s output to PBM. Also consider
pbmreduce.
You can both
enlarge (scale factor > 1) and reduce (scale factor <
1).
When you
specify an absolute size or scale factor for both
dimensions, pnmscale scales each dimension
independently without consideration of the aspect ratio.
If you specify
one dimension as a pixel size and don’t specify the
other dimension, pnmscale scales the unspecified
dimension to preserve the aspect ratio.
If you specify
one dimension as a scale factor and don’t specify the
other dimension, pnmscale leaves the unspecified
dimension unchanged from the input.
If you specify
the scale_factor parameter instead of dimension
options, that is the scale factor for both dimensions. It is
equivalent to -xscale=scale_factor
-yscale=scale_factor .
Specifying the
-reduce reduction_factor option is equivalent
to specifying the scale_factor parameter, where
scale_factor is the reciprocal of
reduction_factor.
-xysize
specifies a bounding box. pnmscale scales the input
image to the largest size that fits within the box, while
preserving its aspect ratio.
-pixels
specifies a maximum total number of output pixels.
pnmscale scales the image down to that number of
pixels. If the input image is already no more than that many
pixels, pnmscale just copies it as output;
pnmscale does not scale up with -pixels.
If you enlarge
by a factor of 3 or more, you should probably add a
pnmsmooth step; otherwise, you can see the original
pixels in the resulting image.
When the scale
factor is not an integer (including all cases of scaling
down), there are two ways to do the scaling. Which one
pnmscale does is controlled by its -nomix
option.
By default,
pnmscale mixes the colors of adjacent pixels to
produce output pixels that contain information from multiple
input pixels. This makes the image look more like it would
if it had infinite resolution. Note that it means the output
may contain colors that aren’t in the input at
all.
But if you
specify -nomix, pnmscale never mixes pixels.
Each output pixel is derived from one input pixel. If
you’re scaling up, pixels get duplicated. If
you’re scaling down, pixels get omitted. Note that
this means the image is rather distorted. If you scale up by
1.5 horizontally, for example, the even numbered input
pixels are doubled in the output and the odd numbered ones
are copied singly.
When the scale
factor is an integer (which means you’re scaling up),
the -nomix option has no effect -- output pixels are
always just N copies of the input pixels. In this case,
though, consider using pamstretch instead of
pnmscale to get the added pixels interpolated instead
of just copied and thereby get a smoother enlargement.
pnmscale
with -nomix is faster than without, but
pnmenlarge is faster still. pnmenlarge works
only on integer enlargements.
A useful
application of pnmscale is to blur an image. Scale it
down (without -nomix ) to discard some information,
then scale it back up using pamstretch.
Or scale it
back up with pnmscale and create a
"pixelized" image, which is sort of a computer-age
version of blurring.
PRECISION
pnmscale uses floating point arithmetic internally.
There is a speed cost associated with this. For some images,
you can get the acceptable results (in fact, sometimes
identical results) faster with pnmscalefixed, which
uses fixed point arithmetic. pnmscalefixed may,
however, distort your image a little. See
pnmscalefixed’s man page for a complete
discussion of the difference.
see also
pnmscalefixed ,
pamstretch , pbmreduce ,
pnmenlarge , pnmsmooth , pnmcut ,
pnm
author
Copyright (C)
1989, 1991 by Jef Poskanzer.