#! /bin/bash
# Last edited on 2024-04-01 10:51:22 by stolfi

usage="$0 TMPNAME [-dpi RESOLUTION] < PSFILE > PNGFILE"

# Converts an encapsulated postscript image to a png image.
# The PSFILE must include %%BoundingBox line

if [[ $# -lt 1 ]]; then
  echo "bad args; usage = ${usage}" 1>&2; exit 1
fi

tmp="$1"; shift;
log=${tmp}.log

dpi=300
while [[  ( $# > 0 ) && ( "/$1" =~ /-* )  ]]; do
  if [[  ( $# > 1 ) && ( "/$1" == "/-dpi" )  ]]; then
    dpi="$2"; shift; shift;
  else
    echo "bad option ($1); usage = ${usage}" >> ${log};
    exit 1
  fi
done

if [[  $# != 0  ]]; then
  echo "bad args; usage = ${usage}" >> ${log}; exit 1
fi

cat > ${tmp}.eps

bbox=( `egrep '^%%BoundingBox' ${tmp}.eps` )

if [[  ${#bbox[@]} -ne 5  ]]; then
  echo 'bad or missing "%%BoundingBox" directive' >> ${log}; exit 1
fi

wd=$(( ${bbox[4]} - ${bbox[2]} ))
ht=$(( ${bbox[5]} - ${bbox[3]} ))

mag=$(( ( ${dpi} + 71 ) / 72  ))

wdx=$(( ${wd} * ${mag} ))
htx=$(( ${ht} * ${mag} ))
dpix=$(( 72 * ${mag} ))

echo "$0 $*" >> ${log}
echo "wd = ${wd} ht = ${ht}" >> ${log}
echo "dpi = ${dpi}" >> ${log}
echo "mag = ${mag}" >> ${log}
echo "wdx = ${wdx} htx = ${htx}" >> ${log}
echo "dpix = ${dpix}" >> ${log}

gs \
    -q \
    -dNOPLATFONTS -dQUIET -dNOPAUSE \
    -sDEVICE=png256 \
    -r${dpix} -g${wdx}x${htx} \
    -sOutputFile=${tmp}.png \
    ${tmp}.eps \
    quit.ps \
  >> ${log}

/bin/rm -f ${tmp}.eps

exit 0
