LINUX.ORG.RU

gui для объединения\разбивки многостраничных tiff


0

0

Добрый день, ALL. Есть ли какое-нибудь gui, в котором секретарша сможет склеивать из одностраничных tiff-сканов многостраничные tiff? Чтобы оно умело хотя бы еще добавлять к многостраничному tiff новых досканированных позднее страничек и разбирать многостраничные обратно в одностраничные. Ткните пальцем - ничего не могу найти. gui от ImageMagick такого вроде не может. Или надо только самому что-то мастерить?


Ах да, для Ubuntu.

indi
() автор топика

разве что делать это в гимпе, там не так уж много шагов надо запомнить, она должна справится.

Хотя, весь процесс можно провернуть без секретарши. Для разделения на несколько изображений нужно использовать -crop (http://www.imagemagick.org/Usage/crop/index.html), для соединения тоже должно что-то быть. И применить к списку файлов. Редактировать этот список можно через gui (gedit).

yet_another_lor_account
()
Ответ на: комментарий от yet_another_lor_account

Секретарша запускающая скрипт - это жестоко.

fdd
()

Спасибо всем, кто откликнулся. А как в гимпе объединить сканы в многостраничный tiff? Не нашел. Если добавлять как слой, то он просто предлагает их объединить при сохранении.

>для соединения можно использовать montage

Видимо, так и сделаю, если ничего подходящего не найдется. И запихать в контекстное меню с помощью nautilus-actions, чтобы можно было мышкой выделять объединяемое. Может, все-таки что-то есть подходящее?

indi
() автор топика
Ответ на: комментарий от indi

>многостраничный tiff

дурак же я, думал это просто нужно склеить несколько изображений, а не какую-от хитрую страничность в тиффе. Почему-бы не использовать тогда djvu?

yet_another_lor_account
()

djvu - нет, так как по умолчанию программы для ее просмотра нет ни у кого. pdf бы подошел. А это проще организовать?

indi
() автор топика
Ответ на: комментарий от Deleted

Не разобрался с pdfmod. Скачал исходники, собрать не смог (я так понял нужно gcc не ниже 5?). Для моих целей, думаю, все же не подойдет. Дело в том, что даже если на выходе pdf, на входе будут все равно tif-странички - их дает сам сканер (а чтобы сосканировать в pdf надо уже спец софтину искать). Вряд ли pdfmod это сможет. Но за наводку спасибо - возможно, пригодится в будущем.

indi
() автор топика

Наваял парочку скриптов с convert.

tiff_concat.sh

#!/bin/bash
#Необходимо: imagemagick, notify, nautilus-actions

iftif() {	
#Эта функция проверяет расширение переданного ей имени файла на tif(f)-овость
#Коды: 	0 - формат tif\tiff;
#	2 - каталог или файл с другим расширением
#	1 - файл без расширения (прочее)

typeErr() {
zenity --error --title='Неверный формат!' --text='Формат всех файлов должен быть \n                      tif\\tiff\nФайл '"$1"' имеет неверный формат.\n\nОперация прервана.'
}

case  "$1"  in 
	*.tif)
	  return 0;;
	*.tiff)
	  return 0;;
	#три последующие категории нужны, чтобы возвратить разный код в случае, когда расширения просто нет, и в других неподходящих случаях
	*/*.*)	#заведомо неверное расширение
	  typeErr "$1";
	  return 2;;
	*/)	#по идее это - папка
	  typeErr "$1";
	  return 2;;
	*)	#оставшийся случай имени без расширения
	  typeErr "$1";
	  return 1;;
esac
}

#Ниже мы пересыпаем список объединяемых файлов ключами -adjoin (команды объединения convert),
#попутно проверяя их tiff-формат по расширению.
concat_params='';
for i in "$@"
	do iftif "$i";
	if [ $? != '0' ]
		then exit
	fi
	concat_params="$concat_params"'  \-adjoin '"\"$i\"";
done;

#В этом цикле идет возня с именем файла, в который будет записан результат объединения
badnameresult=1
while [ "$badnameresult" != 0 ] 				#Мы будем крутить этот цикл, пока имя файла не станет совсем хорошим
	do result=`zenity --file-selection --title='Куда сохранить результат объединения?' --filename="$1"`; #Собственно запрос имени
	if [ "$result" == '' ];	then exit; fi			#Завершаем программу, если вместо вбивания имени юзер нажал "Отмена"
	iftif "$result"						#Проверяем расширение
	badnameresult=$?;					#Запоминаем результат проверки
	if [ $badnameresult == 1 ]				#Если пользователь просто не добавил НИКАКОГО расширения
		then zenity --question --title='Быть может, сохраним сюда?' --text="А давайте сохраним результат в\n$result.tif\n(правильное расширение)?"					#Предлагаем то же название с расширением
		badnameresult=$?;				
		if [ $badnameresult == 0 ]; then result="$result"'.tif';fi #Меняем все, что нужно, в случае согласия
	fi
	if [ $badnameresult == 0 -a -e "$result" ] #Если формат правильный, но файл уже существует, интересуемся, следует ли перезаписать
		then zenity --question --title='Файл уже существует' --text="Файл $result существует. Если продолжить, его данные будут заменены результатом объединения (и это, если все пойдет хорошо). Вы действительно этого хотите?"
		badnameresult=$?
	fi
done	#Если по результатам цикла имеем неудовлетворяющее имя, оно будет запрошено вновь

#Формируем полную строку параметров для команды объединения: файлы-источники, -adjoin, файл-результат
concat_params="$concat_params"' '"\"$result\"";

#Выполняем объединение
eval "convert  $concat_params"
#Смотрим, что получилось
if [ "$?" -eq '0' ]; 
	then 	#Если все ОК, то открываем полученное на просмотр и выводим радостное уведомление
		(evince "$result")&
		((sleep 2)&&
		(zenity --info --timeout=3 --title='Файл создан' --text='Вот - полюбуйтесь.'))&
	else	#Если ничего не вышло, то соообщаем это и код ошибки
		zenity --error --title='Не вышло' --text='Что-то пошло не так.\n\nСообщите администратору код ошибки '"$?"' ,\nчтобы он мог добавить её в свою коллекцию.';
fi
_____________________________________________________________________________________



tiff_split

#!/bin/bash
#Необходимо: imagemagick, notify, nautilus-actions

typeErr() {
zenity --error --title='Неверный формат!' --text='Формат всех файлов должен быть \n                      tif\\tiff\nФайл '"$1"' имеет неверный формат.\n\nОперация прервана.'
}

iftif() {	
#Эта функция проверяет расширение переданного ей имени файла на tif(f)-овость
#Коды: 	0 - формат tif\tiff;
#	2 - каталог или файл с другим расширением
#	1 - файл без расширения (прочее)

case  "$1"  in 
	*.tif)
	  return 0;;
	*.tiff)
	  return 0;;
	#три последующие категории нужны, чтобы возвратить разный код в случае, когда расширения просто нет, и в других неподходящих случаях
	*/*.*)	#заведомо неверное расширение
	  typeErr "$1";
	  return 2;;
	*/)	#по идее это - папка
	  typeErr "$1";
	  return 2;;
	*)	#оставшийся случай имени без расширения
	  return 1;;
esac
}

ifresultlist() {	#Запрашивает у пользовалтеля подтверждение шаблона списка, 0 - если согласен
	zenity --question --title='Утверждение списка' --text="В каталоге \n${1%/*}\n\nбудут созданы следующие файлы:\n${1##*/}000.tif\n${1##*/}001.tif\n${1##*/}002.tif\nи т.д.\n\nПродолжить?";
	return $?
}

iftif "$1"		#проверка типа разделяемого файла
#В следующем цикле мы сверяем тип разделяемого файла(tif) и уточняем шаблон для имен новых файлов
case $? in
   2) exit;;				#Неверный тип разделяемого файла
   1) typeErr "$1"; exit;;		#закрывает программу
   0)
   	result=${1%.*}				#Обрезаем полному имени разделяемого файла расширение
	ifresultlist "$result";			#Утверждаем у пользователя выходной список файлов
	while [ $? != 0 ] 			#Мы будем крутить этот цикл, пока шаблон имен выходных файлов не станет совсем хорошим
		do result=`zenity --file-selection --title='Задайте каталог и шаблон имени(без номеров и расширения) для полученных файлов' --filename="$1"`; 				#Собственно запрос шаблона
		if [ "$result" == '' ];	then exit; fi		#Завершаем программу, если вместо вбивания шаблона юзер нажал "Отмена"
		iftif "$result"			#Проверяем расширение заданного шаблона
		case $? in			#Если раширения нет (правильно), то просто идем дальше
			2)exit;;		#Если левое расширение или каталог, завершаем программу (с сообщением)
			0)result="${result%.*}";;	#Если тифовское расширение, отрезаем его
		esac
		ifresultlist "$result"		#Утверждаем у пользователя выходной список файлов (это ли он имел в виду) - если не подтверждено, идем на следующий виток цикла
	done;;
esac

convert "$1" "$result"%03d.tif	#Сам процесс разделения

if [ $? == 0 ]; 
	then 	#Если все ОК, то выводим радостное уведомление
		zenity --info --timeout=10 --title='Операция выполнена' --text="Разделение файла завершено.\nРезультат вы можете увидеть в каталоге\n${result%/*}."
	else	#Если ничего не вышло, то соообщаем это и код ошибки
		zenity --error --title='Не вышло' --text="Что-то пошло не так.\n\nСообщите администратору код ошибки $? ,\nчтобы он мог добавить её в свою коллекцию.";
fi

indi
() автор топика
Ответ на: комментарий от indi

Поскольку они должны быть запиханы в контекстное меню nautilus, в качестве аргументов для первого скрипта - список объединяемых файлов, ну а для второго - разделяемый файл.

Смущает одно. Если обрабатывается хотя бы десяток листов, это занимает довольно большое время. И в этот момент пользователь не знает, что думать. И, конечно, бежит ко мне с воплями "у меня зависло" :( Надо бы графическое отображение процесса. zenity -progress требует подачи ему потока чисел с процентами. А с чем бы их связать?

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