vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Задача - имеется директория куда сваливаются отсканированные страницы в формате pgm. С именами вида произведение1.pgm, произведение2.pgm и так далее. Надо из этого получить .djvu файл, содержащий все произведение целиком. Почему-то мне упорно хотелось решить эту задачу исключительно средствами make. Чтобы говоришь ему
make  произведение.djvu

а оно само определяет сколько там есть страниц и собирает, конвертируя сначала в pbm, а потом упаковывая cjb2.


Вот что получилось:
%.pbm: %</     font>.pgm
    pgmtopbm $+</  b> >$@</ b>
%.djvu: %</    font>.pbm
    cjb2 -clean $+  $@

define tmpl 
$1.djvu: </    font>$$(patsubst %.pgm,%.djvu,</ b>$$(wildcard $1?.pgm))
    djvm -create $$@ $$+ 
endef   

$(foreach</    font> song,$(wildcard *1.pgm),$(eval  $(call  tmpl,$(song:%1.pgm=%))))


Date: 2006-03-16 02:32 am (UTC)
From: [identity profile] jno2004.livejournal.com
осталось сделать варианты на шелле, авке, питоне, перле, тикле... :-)
#!/bin/bash
result="$1"
name=$(basename "$1" .djvu)
for pgm in ${name}*.pgm
do nm=$(basename "$pgm" .pgm)
   pgmtopbm "$pgm" > "$nm".pbm
   cjb2 -clean "$nm".pbm "$nm".djvu # && rm -f "$nm".pbm
done
djvm -create "$result" "${name}"?*.djvu # && rm -f "${name}"?*.djvu
как-то так? :-)

Date: 2006-03-16 03:12 am (UTC)
From: [identity profile] jno2004.livejournal.com
ну, да. да...
список должен был выглядеть так: осталось сделать варианты на прологе, рефале, лиспе, хаскеле... :-)

Date: 2006-03-16 03:47 am (UTC)
From: [identity profile] jno2004.livejournal.com
зато на некоторых языках можно практически обойтись без временных файлов! :-P

Date: 2006-03-16 03:22 am (UTC)
From: [identity profile] ignik.livejournal.com
Осталось довести до кнопки для оператора рядом с sane с отправлением результатов под index.html за очередной день.

Кстати, это очень полезный пакет получится...

Date: 2006-03-16 05:05 am (UTC)
From: [identity profile] ignik.livejournal.com
. Косая бумага:
Правильные сканеры имеют *чёрную* верхнюю крышку. С ней оно просто.
Выравнивание по строчкам делается довольно просто:

Суммируем по горизонтали, получаем функцию у которой мало между строк и много там где строки.
Вычисляем интеграл от нормы её производной. Это резкость. Выбираем такую горизонталь (из диапазона +/-15 градусов, иначе оператор - алкоголик :) , у которой резкость максимальна.

. Для книжек абсолютная точность порога не очень критична, важно чтобы он не менялся от листа к листу. Можно родить отдельную кнопку калибровки, нажимаемую при замене документа.

. preview не надо, надо postview для контроля.

Date: 2006-03-17 04:37 am (UTC)
From: [identity profile] ignik.livejournal.com
Если нужно качественно, то я подкладываю чёрный лист под следующую страницу.
Кончено наверное в принципе возможно её убрать программно..

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

April 2026

S M T W T F S
    123 4
5 6 7 89 1011
12 13 1415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 15th, 2026 02:41 am
Powered by Dreamwidth Studios