#!/bin/bash
# ---------------------------------------------------------------------------- #
## \file scan.sh
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
# udev :
#
# lsusb
# sudo vi /etc/udev/rules.d/56-sane-backends-autoconfig.rules
# ATTR{idVendor}=="055f", ATTR{idProduct}=="040b", MODE="0666"
# sudo udevadm control --reload-rules
# ---------------------------------------------------------------------------- #
# Exemple de fichier tex pour creer un pdf avec les valeurs par defaut :
#
# \documentclass[a4paper]{article}
# \usepackage{vmargin}
# \setmarginsrb{5mm}{5mm}{5mm}{5mm}{0mm}{0mm}{0mm}{0mm}
# \usepackage{graphics}
# \pagestyle{empty}
# \parindent0mm
# \pdfimageresolution150
#
# \begin{document}
# \includegraphics{01.png}\\
# \includegraphics{02.png}
# \end{document}
# ---------------------------------------------------------------------------- #
if [ "$1" = "-k" ]; then
kill -15 `ps -C scanimage -o pid=`
kill -15 `ps -C scanimage -o pid=`
shift
if [ -z "$1" ]; then
exit 0
fi
fi
if [ -z "$1" ]; then
echo "Usage: `basename $0` [-k] <image-name>"
exit 0
fi
image=$1
# ---------------------------------------------------------------------------- #
# dimensions
# ---------------------------------------------------------------------------- #
echo "1: 210 297"
echo "2: 297 210"
echo "3: 297 420"
echo -n "? [1] "
read ret
if [ -z "$ret" ]; then
ret=1
fi
case "$ret" in
1) lx=210; ly=297;;
2) lx=297; ly=210;;
3) lx=297; ly=420;;
*) lx=`echo $ret | cut -d ' ' -f 1`; ly=`echo $ret | cut -d ' ' -f 2`;;
esac
if ((lx > ly)); then
echo -n "rotation ? (0/n) "
read ret
if [ "$ret" != n ]; then
aconv="-rotate 90"
fi
fi
ascan="-x $lx -y $ly"
# ---------------------------------------------------------------------------- #
# marges
# ---------------------------------------------------------------------------- #
echo -n "marges en mm ? [5] "
read ret
if [ -z "$ret" ]; then
ret=5
fi
if ((ret > 0)); then
((lx = lx - ret * 2))
((ly = ly - ret * 2))
ascan="-x $lx -y $ly -l $ret -t $ret"
fi
# ---------------------------------------------------------------------------- #
# resolution
# ---------------------------------------------------------------------------- #
echo "resolution / resize / density "
echo "ex : 150 100 150"
echo " 600 25 150"
echo -n "resolution / resize / density ? [150 100 150] "
read ret
if [ -z "$ret" ]; then
ret="150 100 150"
fi
resolution=`echo $ret | awk '{ print $1 }'`
resize=`echo $ret | awk '{ print $2 }'`
density=`echo $ret | awk '{ print $3 }'`
if (($resolution * $resize / 100 != $density)); then
echo "erreur: resolution * resize / 100 != density"
exit 1
fi
ascan="$ascan --resolution $resolution"
if (($resize < 100)); then
aconv="$aconv -resize $resize"
fi
aconv="$aconv -density $density"
# ---------------------------------------------------------------------------- #
# couleurs
# ---------------------------------------------------------------------------- #
echo "1: Gray8"
echo "2: Color24"
echo -n "? [1] "
read ret
if [ -z "$ret" ]; then
ret=1
fi
case "$ret" in
1) ascan="$ascan --mode Gray8";;
2) ascan="$ascan --mode Color24";;
*) ascan="$ascan --mode $ret";;
esac
# ---------------------------------------------------------------------------- #
# format
# ---------------------------------------------------------------------------- #
echo "1: png"
echo "2: jpg"
echo -n "? [1] "
read ret
if [ -z "$ret" ]; then
ret=1
fi
case "$ret" in
1) ext=png;;
2) ext=jpg;;
*) ext=$ret;;
esac
if [ -f $image.$ext ]; then
echo "attention: $image.$ext existe"
fi
# ---------------------------------------------------------------------------- #
# white-threshold
# ---------------------------------------------------------------------------- #
echo -n "white-threshold ? (o/N) "
read ret
if [ "$ret" = o ]; then
echo -n "white-threshold ? [90%] "
read ret
if [ -z "$ret" ]; then
ret="90%"
fi
aconv="$aconv -white-threshold $ret"
fi
# ---------------------------------------------------------------------------- #
# quality
# ---------------------------------------------------------------------------- #
echo -n "quality ? [100] "
read ret
if [ -n "$ret" ]; then
aconv="$aconv -quality $ret"
fi
# ---------------------------------------------------------------------------- #
# workarround for md5_buffer error, see install-op-scan-mustekA3.sh
# ---------------------------------------------------------------------------- #
file=~/.local/lib/libmd5.so
if [ -f $file ]; then
ldpreload="LD_PRELOAD=$file"
fi
# ---------------------------------------------------------------------------- #
# main
# ---------------------------------------------------------------------------- #
echo "$ldpreload scanimage $ascan |\
convert -units PixelsPerInch - $aconv $image.$ext"
echo -n "? (O/n) "
read ret
if [ "$ret" != n ]; then
eval $ldpreload scanimage $ascan |\
convert -units PixelsPerInch - $aconv $image.$ext
fi