/usr/bin/ppmquantall is in netpbm 2:10.0-15.3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #!/bin/bash
#
# ppmquantall - run ppmquant on a bunch of files all at once, so they share
# a common colormap
#
# WARNING: overwrites the source files with the results!!!
#
# Verbose explanation: Let's say you've got a dozen pixmaps that you want
# to display on the screen all at the same time. Your screen can only
# display 256 different colors, but the pixmaps have a total of a thousand
# or so different colors. For a single pixmap you solve this problem with
# ppmquant; this script solves it for multiple pixmaps. All it does is
# concatenate them together into one big pixmap, run ppmquant on that, and
# then split it up into little pixmaps again.
usage()
{
echo "usage: $0 [-ext extension] <newcolours> <ppmfile> ..."
exit 1
}
ext=
while :; do
case "$1" in
-ext*)
if [ $# -lt 2 ]; then
usage
fi
ext=".$2"
shift
shift
;;
*)
break
;;
esac
done
if [ $# -lt 2 ]; then
usage
fi
newcolors=$1
shift
nfiles=$#
files=($@)
# Extract the width and height of each of the images.
# Here, we make the assumption that the width and height are on the
# second line, even though the PPM format doesn't require that.
# To be robust, we need to use Pnmfile to get that information, or
# Put this program in C and use ppm_readppminit().
declare -a widths
declare -a heights
for i in ${files[@]}; do
widths=(${widths[*]} `egrep -v '^#' $i | sed '1d; s/ .*//; 2q'`) # #204890
heights=(${heights[*]} `egrep -v '^#' $i | sed '1d; s/ .*//; 2q'`) # #204890
done
#all=`tempfile -p pqa.all -m 600`
#all=.tmp.pqa.all.$$
#rm -f $all
all=$(mktemp -t pqa.all.XXXXXXXXXX) || exit 1 #219019
pnmcat -topbottom -jleft -white ${files[@]} | ppmquant $newcolors > $all
if [ $? != 0 ]; then
exit $?
fi
y=0
i=0
while [ $i -lt $nfiles ]; do
pnmcut -left 0 -top $y -width ${widths[$i]} -height ${heights[$i]} $all \
> ${files[$i]}$ext
if [ $? != 0 ]; then
exit $?
fi
y=$(($y + ${heights[$i]}))
i=$(($i + 1))
done
rm -f $all
|