-
-
Save mludvig/936678 to your computer and use it in GitHub Desktop.
#!/bin/bash -e | |
## Put your sane-detected device name here. | |
#DEVICE="snapscan" | |
## For network scanners use | |
#DEVICE="net:sane.example.org:snapscan" | |
DEVICE='brother4:net1;dev0' | |
## See scanimage --device $(DEVICE) --help | |
SOURCES[0]="FlatBed" | |
SOURCES[1]="Automatic Document Feeder(left aligned)" | |
SOURCES[2]="Automatic Document Feeder(left aligned,Duplex)" | |
SOURCES[3]="Automatic Document Feeder(centrally aligned)" | |
SOURCES[4]="Automatic Document Feeder(centrally aligned,Duplex)" | |
SOURCE=${SOURCES[3]} # Default | |
RESOLUTIONS=(100 150 200 300 400 600 1200 2400 4800 9600) | |
RESOLUTION=150 # Default | |
MODES[0]="Black & White" | |
MODES[1]="Gray[Error Diffusion]" | |
MODES[2]="True Gray" | |
MODES[3]="24bit Color" | |
MODES[4]="24bit Color[Fast]" | |
MODE=${MODES[2]} # Default | |
function process_option() | |
{ | |
declare -a ARRAY=("${!1}"); shift | |
VALUE=$1; shift | |
DEFAULT=$1; shift | |
MESSAGE=$1; shift | |
if in_array ARRAY[@] "${VALUE}"; then | |
echo ${VALUE} | |
exit 0 | |
fi | |
if [ ${VALUE} -lt 0 -o ${VALUE} -ge ${#ARRAY[@]} ]; then | |
echo "$0: ${MESSAGE}" | |
list_array ARRAY[@] "$DEFAULT" | |
exit 1 | |
fi >&2 | |
echo ${ARRAY[${VALUE}]} | |
} | |
function in_array() | |
{ | |
declare -a ARRAY=("${!1}"); shift | |
VALUE=$1; shift | |
for i in ${!ARRAY[@]}; do | |
test "${ARRAY[$i]}" = "${VALUE}" && return 0 | |
done | |
return 1 | |
} | |
function list_array() | |
{ | |
declare -a ARRAY=("${!1}"); shift | |
DEFAULT=$1; shift | |
for i in ${!ARRAY[@]}; do | |
MARK_DEFAULT=" " | |
test "${ARRAY[$i]}" = "${DEFAULT}" && MARK_DEFAULT="*" | |
echo " ${MARK_DEFAULT} [$i] ${ARRAY[$i]}" | |
done | |
} | |
while getopts m:s:r:d:o:kh OPTION | |
do | |
case ${OPTION} in | |
m) | |
MODE=$(process_option MODES[@] "${OPTARG}" "${MODE}" "invalid mode, valid values for -m are:") | |
test $? -gt 0 && exit 1 | |
;; | |
r|d) | |
RESOLUTION=$(process_option RESOLUTIONS[@] "${OPTARG}" "${RESOLUTION}" "invalid resolution, valid values for -r are:") | |
test $? -gt 0 && exit 1 | |
;; | |
s) | |
SOURCE=$(process_option SOURCES[@] "${OPTARG}" "${SOURCE}" "invalid source, valid values for -s are:") | |
test $? -gt 0 && exit 1 | |
;; | |
o) | |
OUTFILE=${OPTARG} | |
;; | |
k) | |
KEEP_TMP=1 | |
;; | |
h|?) | |
usage | |
exit 2 | |
esac | |
done | |
test -z "${OUTFILE}" && usage | |
echo -e "\e[1mScanning options:\e[0m" | |
echo -e "\e[33mMODE: \e[1m${MODE}\e[0m" | |
echo -e "\e[33mDPI: \e[1m${RESOLUTION}\e[0m" | |
echo -e "\e[33mSOURCE: \e[1m${SOURCE}\e[0m" | |
echo -e "\e[33mOUTFILE: \e[1m${OUTFILE}\e[0m" | |
#SCANIMAGE_OPTS=' --resolution 150 --brightness 20 --contrast 20 -l 0 -t 0 -x 210 -y 290' | |
SCANIMAGE_OPTS=' -l 0 -t 0 -x 210 -y 290' | |
if [ "$1" = "" ]; then | |
echo "Usage: $0 <output-file-name.pdf>" | |
exit 1 | |
fi | |
TMPDIR=$(mktemp -d /tmp/scan2pdf.XXXXXXX) | |
echo "Temporary files kept in: ${TMPDIR}" | |
cd ${TMPDIR} | |
set +e | |
scanimage --device ${DEVICE} ${SCANIMAGE_OPTS} --resolution ${RESOLUTION} --source="${SOURCE}" --mode="${MODE}" --progress --verbose --format=tiff --batch # --batch-prompt | |
set -e | |
ls -1 out*.tif > /dev/null | |
tiffcp -c lzw out*.tif scan.tiff | |
cd - | |
tiff2pdf -z ${TMPDIR}/scan.tiff > ${OUTFILE} | |
ls -l ${OUTFILE} | |
if [ -z "${KEEP_TMP}" ]; then | |
rm -rf ${TEMPDIR} | |
else | |
echo "Temporary files are in ${TEMPDIR}" | |
fi |
Despite being written 7 years ago this script still can be hacked into whatever you need it for. I might go ahead and post a proper working code of this as minor changes need to be made to modern syntax changes in scanimage and the program as I want to be able to save someone a few hours because I run a CUPS node with ssh access and this script is exactly what I need.
I might go ahead and post a proper working code of this
NotANormie, please make an updated version of this script. I know, just by looking at it, that I'm going to spend at least an hour tweaking it to my liking; yet in 30 seconds I could/could-of opened simple-scan.
Here is where I'm leaving it at. Testing scan resolution vs jpeg quality.
for r in 300 150 75; do scanimage --device "pixma:04A9173A_90265B" -l 0 -t 0 -x 216.069mm -y 253.990mm --source FlatBed --resolution ${r} --mode="Gray" --progress --verbose --format=tiff > "scanimage${r}.tiff"; for q in 100 75 50 25; do tiff2pdf -p letter -j -q ${q} -t "Document" -f -o "tiff2pdf${q}.pdf" "scanimage${r}.tiff"; done; done
I created an updated and extended version of this script from scratch:
https://gist.github.com/fonic/a9b6920f7a63abe818c541970415b1a0
Big thanks to the author of the original!
Lines 129 and 131 should be TMPDIR, not TEMPDIR