I'm not very happy with the fact that xscanimage can produce only
pnm-output.
By adding a couple of lines to xscanimage.c and providing an additional
shell script I could get easily around this problem.
My scheme is quite simple:
The user specifies the requested output format by the suffix of the
output file (e.g. `output.eps').
After the fclose() call in xscanimage.c the program will check for the
SANE_CONVERT environment variable. If it exists it will call the
program specified in SANE_CONVERT, in my case a shell script called
`sane-convert'. This program takes one argument, the name of the
output file and will convert it to the requested format using
ImageMagick or the netpbm utilities.
Here are the changes I had to apply to xscanimage.c
(line 760+, 7 additinoal lines):
{
+ char *saneconvert, cmd[2*PATH_MAX];
fclose (scan_win.out);
scan_win.out = 0;
+ if ((saneconvert = getenv("SANE_CONVERT")) != NULL)
+ {
+ strcpy(cmd, saneconvert);
+ strcat(cmd, preferences.filename);
+ strcat(cmd, " ");
+ system(cmd);
}
}
And this is the sane-convert shell script:
-------------snip-------------------------
#!/bin/sh
#
# sane-convert: convert a pnm-file generated by xscanimage to a
# user-specified format
# (determined by the filename's suffix).
#
SCRIPT=`basename $0`
#
# Argument checking.
#
if [ $# -ne 1 ]; then
echo "$SCRIPT: invalid number of arguments." 1>&2
exit 1
fi
if [ ! -r $1 ]; then
echo "$SCRIPT: input file \`$1' is not readable." 1>&2
exit 2
fi
#
# Input and output filenames.
#
INPUT=$1-$$.pnm
OUTPUT=$1
#
# Specification of the conversion filters (CHANGE TO YOUR NEEDS!).
#
case $OUTPUT in
*.p[bgpn]m) echo "$SCRIPT: pnm format, conversion skipped."
exit 0
;;
*.eps) CONVERT="convert $INPUT eps2:$OUTPUT"
;;
*.ps) CONVERT="convert -page A4 -border 36x36 -bordercolor white \
-rotate -90\> $INPUT ps2:$OUTPUT"
;;
*.jpg) CONVERT="cjpeg -quality 75 < $INPUT > $OUTPUT"
;;
*) CONVERT="convert $INPUT $OUTPUT"
;;
esac
echo "$SCRIPT: running \`$CONVERT'..."
#
# The converstion step.
#
mv $OUTPUT $INPUT && sh -c "$CONVERT"
if [ $? -eq 0 ]; then
echo "$SCRIPT: conversion completed successfully."
else
echo "$SCRIPT: conversion failed."
fi
#
# Deleting the input file.
#
rm $INPUT
-------------snip-------------------------
What do you think of this concept?
Maybe it is a candidate for sane-1.0.4?
Best regards,
Stefan
-- Stefan Illy | Institut fuer Hochleistungsimpuls- | und Mikrowellentechnik (IHM) e-mail: stefan.illy@ihm.fzk.de | Forschungszentrum Karlsruhe GmbH phone: (+49) 07247/82-4165 | Postfach 3640 fax: (+49) 07247/82-4874 | D-76021 Karlsruhe, Germany-- Source code, list archive, and docs: http://www.mostang.com/sane/ To unsubscribe: echo unsubscribe sane-devel | mail majordomo@mostang.com
This archive was generated by hypermail 2b29 : Tue Aug 15 2000 - 02:28:00 PDT