Showing posts with label png. Show all posts
Showing posts with label png. Show all posts

Wednesday, June 6, 2012

[Bash] ps2png: convert ps to png format with high quality

previous solution using ImageMagicK works too, but may not produce the high quality expected.

#!/bin/bash
# convert a single-page ps file into png format using gs
# usage:
#            ps2png psfile.ps
# Note:
#           1: need gs installed
#           2: same name is used for the png file
#           http://scriptdemo.blogspot.com

if [ $# == 0 ]; then
   sed -n '2,4p' `which ps2png`
   exit
else
  for psname in $*
  do
     if [ -e $psname ]; then
        pngname=`echo ${psname%%.*}`
          gs -r300 -dTextAlphaBits=4 -sDEVICE=png16m -sOutputFile=${pngname}.png -dBATCH -dNOPAUSE ${psname}
     else
        echo "${psname} does not exist!"
     fi
  done
fi

Tuesday, May 10, 2011

png2eps: convert png image to eps with high resolution

#!/bin/bash
# convert a png file into eps file
# Usage:
#           png2eps pngfile.png [-q JPGQuality -r FigResizePercentage]
# e.g.,
#           png2eps aa.png bb.png -q 100 -r 60
# http://scriptdemo.blogspot.com

if [ $# == 0 ]; then
   sed -n '3,6p' png2eps
   exit
fi
JPGQuality='100'
FileResize='80'

nfile=0
while test -n "$1"
do
  case "$1" in
    -q|-quality)
       JPGQuality=$2
       shift
       ;;
    -r|-resize)
       FileResize=$2
       shift
       ;;
    *)
       if [ -e $1 ]; then
          pngfiles[$nfile]=$1
          nfile=`expr $nfile + 1`
       fi
       shift
       ;;
  esac
done
for pngfile in ${pngfiles[*]}
do
  #convert to jpg file first to keep high resolution
  jpgfile=${pngfile%%.*}.jpg
  epsfile=${pngfile%%.*}.eps
  eval "convert -quality ${JPGQuality} -resize ${FileResize}% ${pngfile} ${jpgfile}"
  [ -e ${epsfile} ] && epsfile=tmp_${epsfile}
  eval "convert ${jpgfile} eps3:${epsfile} && rm -f ${jpgfile}"
done
Another solution is to use png2pnm and pnm2ps commands:
#!/bin/bash
# convert a png file into eps file [using pngtopnm, pnmtops]
# Usage:
#           png2eps2 pngfile.png -scale reScale [-o outfile.eps]
# e.g.,
#           png2eps2 aa.png -scale 0.3 -o aa.eps
# http://scriptdemo.blogspot.com

if [ $# == 0 ]; then
   sed -n '3,6p' png2eps2
   exit
fi
reScale='0.3'

nfile=0
while test -n "$1"
do
  case "$1" in
    -s|-r|-scale|-rescale)
       reScale=$2
       shift
       ;;
    -o|-output)
       epsfile=$2
       shift
       ;;
    *)
       if [ -e $1 ]; then
          pngfiles[$nfile]=$1
          nfile=`expr $nfile + 1`
       fi
       shift
       ;;
  esac
done
for pngfile in ${pngfiles[*]}
do
  #convert to jpg file first and resize
  [ ! -n "$epsfile" ] && epsfile=${pngfile%%.*}.eps
  [ $nfile -gt 1 ] && epsfile=${pngfile%%.*}.eps
  [ -e ${epsfile} ] && epsfile=tmp_${epsfile}
  eval "pngtopnm ${pngfile} | pnmtops -noturn -nocenter -scale ${reScale} - >${epsfile}"
  eps2eps -dLanguageLevel=3 ${epsfile} thisTmp${epsfile} && mv thisTmp${epsfile} ${epsfile}
done

Wednesday, January 20, 2010

[Bash] ps2png

New version is here ps2png
#!/bin/bash
# To convert a ps file into png format
# Usage:
#            ps2png [psfile.ps]
# @ http://scriptdemo.blogspot.com

if [ $# == 0 ]; then
   for psname in *.ps
   do
         if [ -e $psname ]; then
            pngname=`echo ${psname%%.*}`
            convert $psname ${pngname}.png
         else
            echo "${psname} does not exist!"
         fi
   done
else
   for psname in $*
   do
        if [ -e $psname ]; then
           pngname=`echo ${psname%%.*}`
           convert $psname ${pngname}.png
        else
           echo "${psname} does not exist!"
        fi
   done
fi

ShowCalendar