#! /bin/sh # DoublePrint.sh # Reads PNM each of 2 specified files, writes PPM to standard output # containing both inputs, the second either below or to the right of # the first, of dimensions such that each input fits within # 3.375"x2.531" when printed as 4"x6". # # Uses 'pnmfile', 'ppmmake', and 'pnmpaste' # # November 4, 2011 # For latest version, see gopher -p users/julianbr sdf.org if [ -z "$2" ] || [ -n "$3" ]; then echo >&2 Usage ${0##*/} \(input pnm file \#1\) \(input pnm file \#2\) echo >&2 Writes PPM to standard output containing both inputs exit 0 fi InputDimensions=$(pnmfile "$1") InputDimensions=${InputDimensions#*, } InputDimensions=${InputDimensions# } Input1Width=${InputDimensions%% *} InputDimensions=${InputDimensions#* } InputDimensions=${InputDimensions# } InputDimensions=${InputDimensions#* } InputDimensions=${InputDimensions# } Input1Height=${InputDimensions%% *} InputDimensions=$(pnmfile "$2") InputDimensions=${InputDimensions#*, } InputDimensions=${InputDimensions# } Input2Width=${InputDimensions%% *} InputDimensions=${InputDimensions#* } InputDimensions=${InputDimensions# } InputDimensions=${InputDimensions#* } InputDimensions=${InputDimensions# } Input2Height=${InputDimensions%% *} WidestInput=$Input1Width if [ $WidestInput -lt $Input2Width ]; then WidestInput=$Input2Width fi HighestInput=$Input1Height if [ $HighestInput -lt $Input2Height ]; then HighestInput=$Input2Height fi if [ $WidestInput -gt $HighestInput ]; then OutputWidth=$(expr $WidestInput \* 32 / 27 + 2) OutputHeight=$(expr \( $Input1Height + $Input2Height \) \* 32 / 27 + 3) if [ $(expr $OutputWidth \* 3) -gt $(expr $OutputHeight \* 2) ]; then OutputHeight=$(expr \( $OutputWidth + 1 \) / 2 \* 3) OutputWidth=$(expr \( $OutputWidth + 1 \) / 2 \* 2) else OutputWidth=$(expr \( $OutputHeight + 2 \) / 3 \* 2) OutputHeight=$(expr \( $OutputHeight + 2 \) / 3 \* 3) fi ppmmake rgb:7F/7F/7F $OutputWidth $OutputHeight \ | pnmpaste "$1" \ $(expr \( $OutputWidth - $Input1Width \) / 2) \ $(expr \( $OutputHeight - $Input1Height - $Input2Height \) \ / 3) \ | pnmpaste "$2" \ $(expr \( $OutputWidth - $Input2Width \) / 2) \ $(expr $OutputHeight - $Input2Height \ - \( $OutputHeight - $Input1Height - $Input2Height \) \ / 3) else OutputWidth=$(expr \( $Input1Width + $Input2Width \) \* 32 / 27 + 3) OutputHeight=$(expr $HighestInput \* 32 / 27 + 2) if [ $(expr $OutputWidth \* 2) -gt $(expr $OutputHeight \* 3) ]; then OutputHeight=$(expr \( $OutputWidth + 2 \) / 3 \* 2) OutputWidth=$(expr \( $OutputWidth + 2 \) / 3 \* 3) else OutputWidth=$(expr \( $OutputHeight + 1 \) / 2 \* 3) OutputHeight=$(expr \( $OutputHeight + 1 \) / 2 \* 2) fi ppmmake rgb:7F/7F/7F $OutputWidth $OutputHeight \ | pnmpaste "$1" \ $(expr \( $OutputWidth - $Input1Width - $Input2Width \) \ / 3) \ $(expr \( $OutputHeight - $Input1Height \) / 2) \ | pnmpaste "$2" \ $(expr $OutputWidth - $Input2Width \ - \( $OutputWidth - $Input1Width - $Input2Width \) \ / 3) \ $(expr \( $OutputHeight - $Input2Height \) / 2) fi echo >&2 ${0##*/}: Writing ${OutputWidth}x${OutputHeight}