LINUX.ORG.RU

Как сконвертировать djvu в jpg?


0

0

Нужно сконвертировать в jpg много многостраничных файлов djvu с различным числом страниц. Пока пользуюсь DjVuLibre и NetPBM, запускаю скрипты вида

for fil in 197*.djvu
do
for pag in `seq -w 1 97`
do
ddjvu -format=pgm -page=$pag $fil - | pnmtojpeg -quality=50 > `basename $fil .djvu`-0$pag.jpg
done
done

После чего вручную сравниваю последние файлы с pag > 90. Если есть дубли -- удаляю, если нет -- прогоняю для бOльших pag и сравниваю снова.

Каким образом извлечь из файла djvu число страниц и скормить это число скрипту? Или есть программа, которая умеет автоматически извлекать все страницы и работает так же быстро, как и DjVuLibre + NetPBM? Заранее спасибо.

★★★★
Ответ на: комментарий от CtrlAltBs

> А почему jpg?? Страницы цветные?

256 оттенков серого. Есть что-то лучше jpg? Сконвертировать в двухуровневые, на мой взгляд, нереально.

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

> djvudump 1.djvu | grep DIRM

Спасибо.

djvudump 1.djvu | grep DIRM | sed -r "s/ DIRM \[.*\] Document directory \(bundled, .* files //" | sed -r "s/ pages\)//"

даёт число страниц, благо все файлы с одинаковой структурой.

Следующий вопрос. Число страниц может быть и 2- и 3-значным. Как сделать так, чтобы seq выдавало последовательность чисел 001-099, а не 01-99? Помимо очевидного варианта ввести ещё одну переменную и присваивать ей "-0", если двузначные, или "-", если есть 3-значные?

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

вообще, напрашивается свой фильтр :) писано на коленке, так что не обессудь

/* mygrep.c */
#include <stdio.h>

int main(int argc, char **argv)
{
    char buf[80];
    int pages, i;

    fscanf(stdin, "%s %s Document directory (bundled, %d files %d pages)", buf, buf, &pages, &pages);

    ++pages;

    for(i = 1;i < pages;i++)
        printf("%03d ", i);

    return 0;
}

-----------------------

$ gcc -o mygrep mygrep.c
$ djvudump 1.djvu | grep DIRM | ./mygrep && echo 
$ 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018

Применять видимо надо как

for pag in `djvudump $fil | grep DIRM | ./mygrep`

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