Sane Batch Scan Workaround

Fri, 10. Jul 2009

Categories: de sysadmin Tags: bash ImageMagick OS X printf SANE scanimage Scanner

Obwohl scanimage aus dem SANE Werkzeugkasten in der (aktuellen?) OS X Version

$ scanimage --version
scanimage (sane-backends) 1.0.21cvs; backend version 1.0.21

(installiert nach http://blog.mro.name/2008/12/scanner-mustek-1200-cu-unter-mac-os-x-105/) beim Versuch per „batch“ mehrere Seiten zu scannen jeweils nach Seite 1 aus der Kurve fliegt:

$ scanimage --batch-start=45 --batch-count=16 --batch --batch-prompt \
--format=pnm --mode Color --resolution 300
...
Scanning page 46
scanimage: sane_start: Invalid argument

und das auch ein bekanntes Problem zu sein scheint, gibt’s einen Workaround per selbstgebautem Shell-Script:

#!/bin/sh
# http://blog.mro.name/2009/07/sane-batch-scan-workaroun/
pre=scan-`date "+%Y-%m-%dT%H:%M"`
echo "To create a pdf, call after scanning the pages:"
echo "    convert $pre*.png -despeckle -density 100x100 -compress JPEG -quality 50 -page a4 $pre.pdf"
for ((i=0;i < 100;i++))
do
  echo "Place document no. $i on the scanner."
  echo "Press <RETURN> to continue, <q> + <RETURN> to quit."
  echo \\a
  read key
  if [[ $key == "q" || $key == "Q" ]] ; then
    break
  fi
  dst=$pre-page$(printf %03d $i)
  scanimage --mode Gray --resolution 300 --buffer-size=1024 --progress > $dst.pnm
  # background conversion:
  (convert $dst.pnm -level 15,85% -density 300x300 -type grayscale \
    -resample 100x100 $dst.png && rm $dst.pnm) &
done
ls -l $pre*

é voilá.

Um das ganze dann noch in ein PDF moderater Größe zu verwandeln genügt (ImageMagick z.B. via darwinport vorausgesetzt):

$ time convert *.png -despeckle -density 100x100 \
-compress JPEG -quality 75 -page a4 out.pdf

real  3m39.867s
user  2m55.069s
sys 0m9.628s

.