LINUX.ORG.RU

Небольшой сценарий для сканирования изображений. С автоматическим определением сканера.

 , , ,


0

2

Основа взята отсюда http://www.sakryukin.ru/?module=articles&c=articles&b=8&a=9 . Я несколько упростил сценарий. Но так же добавил автоматическое определение сканера и возможность его указания в специальном файле. В исходном сценарии сканер был жёстко указан в коде. Так же скрипт раскладывает файлы в папках со структурой YYYY/mm/dd

#!/bin/bash

# Чтобы узнать модель вашего сканера, дайте в консоли команду scanimage -L | awk '{print $2}'

# Разрешение в скрипте вписано исходя из возможностей сканера
# Узнать разрешение можно командой scanimage -d ваш_сканер --help
# соответственно, необходимо исправить скрипт в строке выбора разрешений

file_time=$(date +%d-%m-%Y_%H-%M-%S)

# Каталог для отсканированных изображений, строку всегда заканчивать символом /
scans_dir="/mnt/data/scans/"

var_y=$(date +%Y)
var_m=$(date +%m)
var_d=$(date +%d)

 
 
# Проверка наличия изпользуемых в скрипте приложений
if [[ ! -f $(which scanimage) ]] || [[ ! -f $(which convert) ]]; then
	echo "Нет sane или imagemagick"
    exit 0;
fi
 

if ! [ -f $scans_dir'scaner' ]; then
#Файл с предварительно определённым сканером не найден


echo "Поиск сканера..."
	scaners=$(scanimage -L | grep device)

	device=$(echo $scaners | awk '{print $2}' | sed "s/[\`']//g" )
	echo "Найден сканер " $device
	echo "Можно создать файл " $scans_dir'scaner' и написать в него строку $device

	#Поиск сканера
fi

if [ -f $scans_dir'scaner' ]; then
	echo "Сканер определён заранее содержимым файла " $scans_dir'scaner'
	device=$(cat $scans_dir'scaner')
	echo "Сканер" $device
	echo "Если сканер определён не правильно, удалите этот файл."
fi
 
if [[ $device != "" ]]; then

echo "Сканирование..."
 
# Выбор разрешения (dpi)
dpi=300
 

# Сканирование
        file_time=$(date +%d-%m-%Y_%H-%M-%S) ;
        scanimage --mode Color --resolution $dpi --device-name=$device > /tmp/$file_time.pnm ;
	
	echo "Сканирование завершено"
 
	# Конвертирование pnm из каталога /tmp/ в jpg
	echo "Конвертация в jpeg..."

	convert /tmp/$file_time'.pnm' /tmp/$file_time'.jpeg'
	echo "Конвертация в закончена"
 
	# Удаляем pnm в каталоге /tmp
	echo "Удаление pnm..."
    	rm /tmp/$file_time'.pnm';
 
	echo "Перемещение файлов"

	# Создание подкаталогов если их нет.
	if ! [ -d $scans_dir$var_y ]; then
		mkdir $scans_dir$var_y
		chmod 777 $scans_dir$var_y
	fi
	if ! [ -d $scans_dir$var_y$'/'$var_m ]; then
		mkdir $scans_dir$var_y$'/'$var_m
		chmod 777 $scans_dir$var_y$'/'$var_m
	fi
	if ! [ -d $scans_dir$var_y$'/'$var_m'/'$var_d ]; then
		mkdir $scans_dir$var_y$'/'$var_m'/'$var_d
		chmod 777 $scans_dir$var_y$'/'$var_m'/'$var_d
	fi
	
	cp /tmp/$file_time'.jpeg' $scans_dir$var_y'/'$var_m'/'$var_d'/'
	chmod 777 $scans_dir$var_y'/'$var_m'/'$var_d'/'$file_time'.jpeg'
	rm -f /tmp/$file_time'.jpeg'
	
else



 
# Если сканер не обнаружен
	echo "Сканер не подключен"
 
# Ни и для шику пищим системным биппером (необходимо установленное приложение beep)
    if [[ -f $(which beep) ]]; then
        beep -f 440,00 -l 100 ;
        beep -f 391,99 -l 100 ;
        beep -f 261,63 -l 100 ;
        beep -f 1 -l 1000 ;
    fi
fi

echo "Завершено, файлы находятся в каталоге " $scans_dir$var_y'/'$var_m'/'$var_d'/'
exit 0 ;

Если охото запускать сценарий мышкой и видеть его вывод, то следует запускать его при помощи другого сценария с командой описанной здесь Как в шелле сделать ожидания нажатия любой клавиши? (комментарий)

Скрипт лицензионную под GNU GPL v3

Вместо convert лучше использовать pnmtojpeg.

Allakka ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.