diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2019-06-28 23:45:11 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2019-06-28 23:45:11 +0000 |
commit | cdf6e0151411d887fef61245cb303ef190b29335 (patch) | |
tree | 678c2212e125e66e0a868773e2b4ec460794da4e /editor/pamstretch-gen | |
parent | de1311e820dc892f1a3c5c9ae70dbc56868030d8 (diff) | |
download | netpbm-mirror-cdf6e0151411d887fef61245cb303ef190b29335.tar.gz netpbm-mirror-cdf6e0151411d887fef61245cb303ef190b29335.tar.xz netpbm-mirror-cdf6e0151411d887fef61245cb303ef190b29335.zip |
Promote Advanced to Stable
git-svn-id: http://svn.code.sf.net/p/netpbm/code/stable@3641 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'editor/pamstretch-gen')
-rwxr-xr-x | editor/pamstretch-gen | 165 |
1 files changed, 107 insertions, 58 deletions
diff --git a/editor/pamstretch-gen b/editor/pamstretch-gen index ba0e8188..fec4469c 100755 --- a/editor/pamstretch-gen +++ b/editor/pamstretch-gen @@ -1,80 +1,129 @@ #!/bin/sh +############################################################################### +# pamstretch-gen +############################################################################### +# A generalized version of pamstretch that can do non-integer scale factors. # -# pamstretch-gen - a shell script which acts a little like a general -# form of pamstretch, by scaling up with pamstretch then scaling -# down with pamscale. +# 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'. # -# Copyright (C) 1998,2000 Russell Marks. -# -# 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. -# +############################################################################### +# Scan command line arguments -if [ "$1" = "" ]; then - echo 'usage: pamstretch-gen N [pnmfile]' +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="-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 -tempdir="${TMPDIR-/tmp}/pamstretch-gen.$$" -mkdir -m 0700 $tempdir || \ - { echo "Could not create temporary file. Exiting."; exit 1;} -trap 'rm -rf $tempdir' 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 -tempfile=$tempdir/pnmig +# 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". -if ! cat $2 >$tempfile 2>/dev/null; then - echo 'pamstretch-gen: error reading file' 1>&2 +report=$(pamscale -reportonly $1 $tempfile) +if [ $? -ne 0 ]; then + echo "pamstretch-gen: pamscale -reportonly $1 (file) failed" 1>&2 exit 1 fi -if ! pnmfile $tempfile 1>/dev/null 2>/dev/null; then - echo 'Not valid pnm input' - 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}' ) -# we use the width as indication of how much to scale; width and -# height are being scaled equally, so this should be ok. -width=`pnmfile $tempfile 2>/dev/null|cut -d " " -f 3` +# Note that $1, $2, ..., $6 here are fields of the input line fed to awk, +# not shell positional parameters. -if [ "$width" = "" ]; then - echo 'pamstretch-gen: not a PNM file' 1>&2 - exit 1 -fi +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 -# should really use dc for maths, but awk is less painful :-) -target_width=`awk 'BEGIN{printf("%d",'0.5+"$width"*"$1"')}'` +pamstretch -dropedge $quietopt $iscale $tempfile |\ + pamscale $verboseopt $quietopt $plainopt $width_height -# work out how far we have to scale it up with pamstretch so that the -# new width is >= the target width. -int_scale=`awk ' -BEGIN { -int_scale=1;int_width='"$width"' -while(int_width<'"$target_width"') - { - int_scale++ - int_width+='"$width"' - } -print int_scale -}'` -if [ "$int_scale" -eq 1 ]; then - pamscale "$1" $tempfile -else - pamstretch "$int_scale" $tempfile | pnmscale -xsi "$target_width" -fi +# 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. + |