имеется отсканированная большая книга, и требуется перевести её в компактный формат для последующего просмотра в том же djview. В общем, нужно создавать документы DjVU в Linux.
в Linux просто и легко конвертируем насканированные страницы в DJVU.
Почему DJVU?
Потому, что есть множество отсканированных книг, и есть потребность их компактно хранить и работать с ними. Для этой задачи орлы из AT&T Labs разработали специальные алгоритмы сжатия, которые легли в основу формата DJVU.
Такие электронные книги занимают меньше места, чем, скажем, в PDF, PS или других форматах, и быстрее отображаются при просмотре.
Что потребуется для создания DJVU файлов из изображений
Для того, чтобы сконвертировать много изображений в DJVU нужно установить следующие пакеты:
aptitude install djview djvulibre-bin netpbm
При сканировании следует именовать файлы подряд так, чтобы они сортировались в порядке нумерации страниц. То есть вот так:
000.jpg, 001.jpg, 002.jpg, ..., 012.jpg
а не так: 0.jpg, 1.jpg, 2.jpg, ..., 12.jpg
потому как 12.jpg появится перед 2.jpg - так что при сканировании нужно об этом подумать.
Файлы изображений помещаются в отдельный каталог, после чего переходим в этот каталог и даём команду:
./any2djvu-bw
Эта команда - вызов скрипта оболочки, текст которого приведён ниже:
#!/bin/bash
#
# any2djvu-bw
#
if [ -z `which anytopnm` -o -z `which ppmtopgm` -o -z `which pgmtopbm`\
-o -z `which cjb2` ]; then
usage
echo "Error: anytopnm, ppmtopgm, pgmtopbm and cjb2 are needed"
echo
exit 1
fi
shopt -s extglob
# DEFMASK="*.jpg"
DEFMASK="*.png"
DPI=300
# uncomment the following line to compile a bundled DjVu document
OUTFILE="#0-bw.djvu"
function usage() {
echo
echo "usage:"
echo
echo "$0 [\"REGEXP\"]"
echo " converts single pages with the default mask $DEFMASK (or REGEXP if provided)"
echo " in the current directory to single-page black and white djvu documents"
# uncomment the following line to compile a bundled DjVu document
echo " and bundles them as a djvu file $OUTFILE"
echo
}
if [ -n "$1" ]; then
MASK=$1
else
MASK=$DEFMASK
fi
for i in $MASK; do
if [ ! -e $i ]; then
usage
echo "Error: current directory must contain files with the mask $MASK"
echo
exit 1
fi
if [ ! -e $i.djvu ]; then
echo "$i"
anytopnm $i | ppmtopgm | pgmtopbm -value 0.499 > $i.pbm
# in netpbm >= 10.23 the above line can be replaced with the following:
# anytopnm $i | ppmtopgm | pamditherbw -value 0.499 > $.pbm
cjb2 -dpi $DPI $i.pbm $i.djvu
rm -f $i.pbm
fi
done
# uncomment the following line to compile a bundled DjVu document
djvm -c $OUTFILE $MASK.djvu
Красным в скрипте выделена строчка, где определяется, какой формат файлов будет преобразован в DJVU. В данном примере это png.
Итак, в результате работы скрипта появятся промежуточные файлы djvu и файл #0-bw.djvu - это и есть конечный файл, содержащий в себе все страницы. Переименовываем его в то, что более приятно глазу, и готово. После этого можно открыть полученный файл при помощи djview или evince.
any2djvu
Это веб-сервис, находящийся тут. Он позволяет перевести отсканированные изображения непосредственно в файл DJVU. Удобно для тех, у кого широкий и дешёвый интернет-канал.
Так же можно воспользоваться кодом, предложенным комментатором с OpenNet:
#!/usr/bin/perl -w
my $i = 0;
my @cmds = qw[ djvm -c output.djvu ];
foreach ( <*.*> ) {
if (/(.*)\.jpg$/ ){
print "$_\n";
# system("c44", '-crcbfull', $1.'.jpg', $1.'.djvu');
system("cpaldjvu", $1.'.jpg', $1.'.djvu');
$i++;
push @cmds, $1.'.djvu';
}
elsif (/(.*)\.tif$/ ) {
print "$_\n";
# установить 300 dpi в tiff'e
#system("tiffset", '-s 296 2', $1.'tiff');
#system("tiffset", '-s 282 300.0', $1.'tiff');
#system("tiffset", '-s 283 300.0', $1.'tiff');
# или
# system("cjb2", '-dpi', '300', '-losslevel', '100', $1.'.tiff', $1.'.djvu');
system("cjb2", $1.'.tif', $1.'.djvu');
$i++;
push @cmds, $1.'.djvu';
}
}
print "$i files renamed\n";
system(@cmds);
print "\n$cmds[2] created";
Конвертируем PDF-документ в DJVU
Сконвертированные документы DJVU из PDF, как правило, имеют меньший размер и гораздо быстрее просматриваются, что особенно актуально для портативных устройств.
Для того, чтобы сконвертировать файл PDF в DjVu, требуется в текущем каталоге выполнить:
./pdfs2djvu
Это тоже скрипт на баше, код которого такой:
#!/bin/bash
#
# pdfs2djvu
#
if [ -z `which pdftoppm` -o -z `which cjb2` -o -z `which djvm` ]; then
echo
echo "Error: pdftoppm, cjb2 and djvm are needed"
echo
exit 1
fi
shopt -s extglob
OUTFILE="#0.djvu"
DEFMASK="*.pdf"
DPI=600
if [ -n "$1" ]; then
MASK=$1
else
MASK=$DEFMASK
fi
for PDF in $MASK; do
if [ ! -e $PDF ]; then
echo
echo "Error: current directory must contain files with the mask $MASK"
echo
exit 1
fi
echo $PDF
pdftoppm -mono -r 600 -aa yes $PDF $PDF
for PBM in $PDF*.pbm; do
echo $PBM
cjb2 -dpi $DPI $PBM $PBM.djvu
rm -f $PBM
done
done
djvm -c $OUTFILE $MASK*.pbm.djvu
Выполнение скрипта приведёт к тому, что все файлы PDF в текущей директории будут сконвертированы в DJVU. Аналогом является программа от Гугл под названием dpf2djvu.
Единственное условие: скрипт не переваривает кириллические названия с пробелами. Так что желательно временно переименовать файл так, чтобы он содержал только латинские символы и желательно без пробелов.
Ещё можно попробовать программу , которая позволяет сканировать изображения в форматы PDF и DJVU. Так же вам может пригодиться программа
для «очистки» сканов. Это существенно улучшает их пригодность для последующего компьютерного использования.