#!/bin/sh ############################################################################### # pamstretch-gen ############################################################################### # A generalized version of pamstretch that can do non-integer scale factors. # # It works by scaling up with pamstretch then scaling down with pamscale. # # it also copes with N<1, but then it just uses pamscale. :-) # # Formerly named 'pnminterp-gen' and 'pnmstretch-gen'. # ############################################################################### # Scan command line arguments while true ; do case "$1" in -version|--version ) pamstretch --version; exit $?; ;; -p|-pl|-pla|-plai|-plain|--p|--pl|--pla|--plai|--plain ) plainopt="-plain" shift ;; -q|-qu|-qui|-quie|-quiet|--q|--qu|--qui|--quie|--quiet ) quietopt="-quiet" shift ;; -verb|-verbo|-verbos|-verbose|--verb|--verbo|--verbos|--verbose ) verboseopt="-verbose" shift ;; -* ) echo 'usage: pamstretch-gen N [pnmfile]' 1>&2 exit 1 ;; * ) break ;; esac done tempfile=$(mktemp "${TMPDIR:-/tmp}/netpbm.XXXXXXXX") if [ $? -ne 0 -o ! -e $tempfile ]; then echo "Could not create temporary file. Exiting." 1>&2 exit 1 fi trap 'rm -rf $tempfile' 0 1 3 15 case "$#" in 0) echo "pamstretch-gen: too few arguments" 1>&2 exit 1 ;; 1 ) if ! cat > $tempfile; then echo "pamstretch-gen: error reading input" 1>&2 exit 1 fi ;; 2 ) if ! cat $2 > $tempfile; then echo "pamstretch-gen: error reading file "$2 1>&2 exit 1 fi ;; * ) echo "pamstretch-gen: misaligned arguments or too many arguments" 1>&2 exit 1 ;; esac # Calculate pamstretch scale factor (="iscale") and output width and # height. Usually "int(scale) + 1" is sufficient for iscale but # in some exceptional cases adjustment is necessary because of # "-dropedge". report=$(pamscale $quietopt -reportonly $1 $tempfile) if [ $? -ne 0 ]; then echo "pamstretch-gen: pamscale -reportonly $1 (file) failed" 1>&2 exit 1 fi iscale_width_height=$(echo $report |\ awk 'NF!=6 || $1<=0 || $2<=0 || $3<=0 || $5<=0 || $6<=0 { exit 1 } { if ($3 > 1.0) { iscale = int($3) + 1; if (iscale * ($1-1) < $5 || iscale * ($2-1) < $6 ) ++iscale; } else { iscale = 1 } # $3 <= 1.0 } { print iscale, "-width="$5, "-height="$6}' ) # Note that $1, $2, ..., $6 here are fields of the input line fed to awk, # not shell positional parameters. iscale=${iscale_width_height% -width=* -height=*} width_height=${iscale_width_height#* } if [ -n "$verboseopt" ]; then echo "pamstretch-gen: rounded scale factor=$iscale $width_height" 1>&2 fi pamstretch -dropedge $quietopt $iscale $tempfile |\ pamscale $verboseopt $quietopt $plainopt $width_height # Copyright (C) 1998,2000 Russell Marks. # Modifications for "pamscale -reportonly" "pamstretch -dropedge" by # Akira Urushibata (Jan. 2019) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or (at # your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.