#!/usr/local/bin/perl # # pstogif.pl v1.0, July 1994, by Nikos Drakos # Computer Based Learning Unit, University of Leeds. # # Accompanies LaTeX2HTML Version 0.6.4 # # Script to convert an arbitrary PostScript image to a cropped GIF image # suitable for incorporation into HTML documents as inlined images to be # viewed with Xmosaic. # # This is based on the pstoepsi script # by Doug Crabill dgc@cs.purdue.edu # # Please note the following: # - The source PostScript file must end # in a .ps extention. This is a GhostScript requirement, not mine... # - The -density and the -quality arguments have no effect unless the # color depth (set with the -depth argument) is equal to 1. # - Valid arguments for -depth are 1,8, or 24. # - Valid arguments for -quality are integers between 1 and 10. Higher # numbers will result in much longer processing times and larger # intermediate files. # - The -quality option is particularly useful for converting text or # equations. # # This software is provided as is without any guarantee. # # Nikos Drakos (ND), nikos@cbl.leeds.ac.uk # Computer Based Learning Unit, University of Leeds. # # 20 JUL 94 ND Converted to Perl and made several changes eg it now accepts # parameters from environment variables or from command line or will use # default ones. # # 1 APR 94 ND Changed the suffixes of multi-page files from xbm to gif (oops!) # # ##################################################################### $| =1; &read_args; ### You may need to specify some pathnames here if you want to ### run the script without LaTeX2HTML # Ghostscript $GS= $ENV{'GS'} || 'gs'; # Available in the PBMPLUS libary $PNMCROP=$ENV{'PNMCROP'} || 'pnmcrop' ; # Also in PBMPPLUS $PPMTOGIF=$ENV{'PPMTOGIF'} || 'ppmtogif' ; $OUTFILE = $ENV{'OUTFILE'} || $out; # Valid choices for $COLOR_DEPTH are 1, 8 or 24. $DEPTH = $ENV{'DEPTH'} || $depth || 24; #Default density is 72 $DENSITY = $ENV{'DENSITY'} || $depth || 72; # Valid choices are any numbers greater than zero # Useful choices are numbers between 0.1 - 5 # Large numbers may generate very large intermediate files # and will take longer to process $SCALE = $ENV{'SCALE'} || $scale; # No default value $DEBUG = $ENV{'DEBUG'} || 0; ###################################################################### &main; sub read_args { local($_); while ($ARGV[0] =~ /^-/) { $_ = shift @ARGV; if (/^-h(elp)?$/) { &usage; exit} elsif (/^-out$/) { $out = shift @ARGV; } elsif (/^-(.*)$/) { eval "\$$1 = shift \@ARGV;"} # Create and set a flag $ }} sub main { local($base, $outfile, $i, $j); $base = &test_args; $outfile = $OUTFILE || "$base.gif"; open(STDERR, ">/dev/null") unless $DEBUG; &convert($base); if (-f "$base.ppm") { &crop_scale_etc("$base.ppm", $outfile); } else { foreach $i (<$base.[1-9]*ppm>) { $j = $i; $j =~ s/\.(.*)ppm/$1.gif/; &crop_scale_etc($i, $j)} } &cleanup($base); } sub crop_scale_etc { local($in, $out) = @_; open(STDERR, ">/dev/null") unless $DEBUG; system("$PNMCROP $in | $PPMTOGIF - > $out"); print "Writing $out\n"; } sub test_args { local($file) = $ARGV[0]; if (! ($file =~ s/\.ps$//)) { print "The name of the input file must end in '.ps'\n"; exit} elsif (! ( -f "$file.ps")) { print "Cannot find file $file.ps\n."; exit} elsif (! ($DEPTH =~ /^(1|8|24)$/)) { print "The color depth must be 1 or 8 or 24. You specified $DEPTH\n"; exit } if (defined $SCALE) { if ($SCALE > 0) { $DENSITY = int($SCALE * 72)} else { print "Error: The scale must be greater than 0.\n" . "You specified $SCALE\n"; exit} } $file; } sub convert { local($base) = @_; system("$GS -q -dNOPAUSE -sDEVICE=ppmraw -r$DENSITY -sOutputFile=$base.ppm -- $base.ps"); } sub cleanup { local($base) = @_; unlink <$base[0-9.]*ppm>; } sub usage { print "Usage: pstogif [-h(elp)] [-out ] [-depth ] [-density ] .ps\n\n"; }