Задача: имеется отсканированная большая книга, и требуется перевести её в компактный формат для последующего просмотра в том же djview. В общем, нужно создавать документы DjVU в Linux. #!/bin/bash
Решение: в Linux просто и легко конвертируем насканированные страницы в DJVU.
Почему DJVU?
Потому, что есть множество отсканированных книг, и есть потребность их компактно хранить и работать с ними. Для этой задачи орлы из AT&T Labs разработали специальные алгоритмы сжатия, которые легли в основу формата DJVU.
Такие электронные книги занимают меньше места, чем, скажем, в PDF, PS или других форматах, и быстрее отображаются при просмотре.
Что потребуется для создания DJVU файлов из изображений
Для того, чтобы сконвертировать много изображений в DJVU нужно установить следующие пакеты:aptitude install djview djvulibre-bin netpbm
При сканировании следует именовать файлы подряд так, чтобы они сортировались в порядке нумерации страниц. То есть вот так:
а не так:
Файлы изображений помещаются в отдельный каталог, после чего переходим в этот каталог и даём команду:./any2djvu-bw
Эта команда - вызов скрипта оболочки, текст которого приведён ниже:
Красным в скрипте выделена строчка, где определяется, какой формат файлов будет преобразован в DJVU. В данном примере это png.
#
# 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 и файл #0-bw.djvu - это и есть конечный файл, содержащий в себе все страницы. Переименовываем его в то, что более приятно глазу, и готово. После этого можно открыть полученный файл при помощи djview или evince.
Так же перевести документы в формат DJVU можно и другими утилитами.
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.
Единственное условие: скрипт не переваривает кириллические названия с пробелами. Так что желательно временно переименовать файл так, чтобы он содержал только латинские символы и желательно без пробелов.
Ещё можно попробовать программу gscan2pdf, которая позволяет сканировать изображения в форматы PDF и DJVU. Так же вам может пригодиться программа unpaper для «очистки» сканов. Это существенно улучшает их пригодность для последующего компьютерного использования.
Ссылки
Пост является волным пересказом этой замечательной статьи, тексты скриптов оттуда же. Так же можно прочесть вот это и это. Интересная подборка материалов на русском есть тут.
Создание документов DJVU в Linux
Подписаться на:
Комментарии к сообщению (Atom)
44 комментариев: |высказаться!| RSS-лента дискуссии.|
Поправь, пожалуйста - PDF в DJVU. А то сразу бросается в глаз. ;-)
Для конвертации PDF в DJVU еще можно использовать веб-сервис http://any2djvu.djvuzone.org/
Мне удобнее всё в pdf (как в контейнер), а потом pdf2djvu http://code.google.com/p/pdf2djvu
А эти пакеты в каких Дебовских дистрибах содержатся? Начиная с первого, или только в Этче?
Имеется ещё утилита djvudigital.
2 Tanya пишет...
Поправь, пожалуйста - PDF в DJVU.
То есть DjVu в DJVU? Правильно понял? Тогда поправил :-)
2 div пишет...
Для конвертации PDF в DJVU еще можно использовать веб-сервис http://any2djvu.djvuzone.org/
Не у всех есть такой широкий канал. Но спасибо, добавлю в пост.
2 yamadharma пишет...
pdf2djvu http://code.google.com/p/pdf2djvu
Не знал. Спасибо.
2 strangeman пишет...
А эти пакеты в каких Дебовских дистрибах содержатся?
По крайней мере в Этче есть, а про первые дистрибутивы Дебиан не знаю :-)
2 Shender пишет...
Имеется ещё утилита djvudigital.
Посмотрю. Спасибо.
Огромное спасибо комментаторам за перечисленные утилиты. Обязательно на них гляну. Если есть что ещё - пишите, не стесняйтесь.
>> Выполнение скрипта приведёт к тому, что все файлы PDF в текущей директории будут сконвертированы в PDF.
2 Deepwalker пишет...
Спасибо большое. Вот чёрт, сколько раз пост вычитывал - а всё равно грабли попадаются... Чтоб я без комментаторов делал!? :-)
Для сканирования и последующего сохранения в djvu, pdf или какой-либо графический формат использую программу gscan2pdf. Очень удобная вещь!
сайт программы http://gscan2pdf.sourceforge.net/
Есть одна фича в PDF. Я могу выделить в KPDF область и получить в буфер текст. Потом из буфера вставить в программу (если код), в письмо, в любой документ.
Можно ли такое из DJVU? Если нет, то надо поддчеркнуть, что выиграв в размере файла, можно потерять в другом.
А есть ли инструменты для поджатия PDF? Не для архиваирования, а для уменьшения размера.
А у меня из цветных картинок получились черно-белые. Можно это исправить. Спасибо
а подкрутить качество никак нельзя при сжатии?
Что мне не нравится в djvu, так это отсутсвие просмотра нескольких страниц одновременно.
Или есть где-то?
1) Насчет текста в djvu. Если добавить в djvu текстовый слой, т.е. попросту рапознанный текст, то его можно копировать и вставлять куда надо. Есть соответствующая утилита, которая вставляет в djvu распознанный текст прямо из пакетов Finereader, но к сожалению она виндовая.
2) Справедливости ради, нужно сказать, что опенсорсный кодер djvulibre хуже по эффективности, чем виндовый от LizardTech.
Хорошая подборка материалов по djvu есть здесь: http://www.djvu-inf.narod.ru/
2 Анонимный
>http://www.djvu-inf.narod.ru/
Здесь нет ничего про *nix-программы.
мне кажется что тут много лишнего
вот собрать djvu из картинок (закоментированы различные оптимизации):
---
#!/usr/bin/perl -w
my $i = 0;
my @cmds = qw[ djvm -c output.djvu ];
#my @fls = <*.tif>;
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";
---
и разбор на tiff'ы
---
#!/usr/bin/perl -w
mkdir 'pics';
my @cmd = qw[ djvmcvt -i input.djvu pics index.djvu ];
system (@cmd);
foreach ( < pics/*.djvu > ) {
m/(.*)\.djvu$/;
if ( $1 ne 'index' ) {
system("ddjvu", '-format=tif', $_, $1.'.tiff');
unlink $_;
}
}
---
аналогично разбирается на jpeg'и
делать pdf2djvu не вижу смысла.
Для нормального pdf это только ухудшит качество и увеличит размер.
Спасибо большое за статью, пригодится.
В отношении 2.jpg 12.jpg - всё несложно переименовывается при помощи rename в 002.jpg и 012.jpg (на тот случай, если кто-то уже насканировал таким образом).
Большое спасибо уважаемым комментаторам за ценные замечания - обязательно добавлю их в пост!
Если есть что-то ещё, что можно сделать с djvu-документами - пишите.
Для конвертирования pdf -> djvu я использую скрипт на питоне (ниже) который чуть подточил (чтоб не было проблем с именами файлов с пробелами).
Оригинальный скрипт, который был когда-то нагуглен:
#!/usr/bin/python
#########################################################################
# PDF2DJVU version 0.12 -- Converts a PDF file to a DJVU file.
#
# Copyright 2005, 2006 Jonathan Hanke
# Original Author: Jonathan Hanke
# Last updated by Jonathan Hanke on March 4, 2006
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA
#########################################################################
# Version History:
#
# Version 0.12 -- Padded the page number strings to give correct page orderings
# Version 0.11 -- Ported from Bash to Python
# Version 0.10 -- Original Bash script
#
#########################################################################
# To Do:
# - Add a flag to reinstate the page rotation feature
#
#########################################################################
import os, sys, time, tempfile, string
## Print the current version
print "Using pdf2dj v0.12 -- Written by Jonathan Hanke, last modified 3/4/2006"
## Get an argument list from the command line
arg_list = sys.argv[1:]
## Filter for only ".pdf" suffixes
pdf_args = [ name for name in arg_list if name.endswith(".pdf") ]
print " There are", len(pdf_args), " PDF files to convert."
###############
## FILE LOOP ##
###############
for pdf_filename in pdf_args:
## Make the temporary directory
tmp_dir = tempfile.mkdtemp("", pdf_filename + "__", "/tmp")
## (Partially) protect the filename(s) for Bash
bashpdf_filename = pdf_filename.replace("(", "\(").replace(")", "\)") # Protect parentheses
bashpdf_filename = bashpdf_filename.replace("'", "\'").replace('"', '\"') # Protect single and double quotes
#bashtmp_dir = tmp_dir
bashtmp_dir = tmp_dir.replace("(", "\(").replace(")", "\)") # Protect parentheses
bashtmp_dir = bashtmp_dir.replace("'", "\'").replace('"', '\"') # Protect single and double quotes
## Find the number of pages in the pdf file
pages_text = os.popen("pdfinfo " + bashpdf_filename + " | grep 'Pages:'").readline()
num_of_pages = int(pages_text.lstrip("Pages:").strip())
print "There are", num_of_pages, "pages in the PDF file", pdf_filename
###############
## PAGE LOOP ##
###############
for num in range(1, num_of_pages + 1):
num_str = string.zfill(num, 8) # Allows up to 10 million (correctly ordered) pages
if os.path.exists(tmp_dir + "/" + num_str + ".djvu"):
print " Found page ", num, " -- ", time.asctime()
else:
print " Generating page ", num, " -- ", time.asctime()
# Extract the current page
extracted_pagename = bashtmp_dir + "/newpage_" + num_str
GS_Basic = "gs -q -r300 -dNOPAUSE -dBATCH -dSAFER -sDEVICE=ppmraw"
GS_Custom = "-dFirstPage=" + str(num) + " -dLastPage=" + str(num) + " -sOutputFile=" + extracted_pagename + " -- " + bashpdf_filename
os.system(GS_Basic + " " + GS_Custom)
# ######################################
# ## ADD THIS FUNCTIONALITY AS A FLAG ##
# ######################################
#
# # Rotate CCW by the number of degrees in the second argument!
# if [ $# = 1 ]; then
# ## echo " No extra operations!"
# sleep 0 #Dummy command
# else
# ## echo " Rotating clockwise by $2 degrees!"
# convert -rotate $2 $tmp_dir/newpage_$num $tmp_dir/newpage_$num-rot$2.ppm
# rm -f $tmp_dir/newpage_$num # Needed to ensure that we only convert the rotated image!
# fi
# Convert the page djvu format, then remove it
converted_pagename = bashtmp_dir + "/" + num_str + ".djvu"
os.system("cpaldjvu -dpi 300 " + extracted_pagename + " " + converted_pagename)
os.system("rm -f " + extracted_pagename)
# Assemble each multi-page djvu document
djvu_filename = bashpdf_filename.rstrip(".pdf") + ".djvu" # This is the filename with .pdf replaced by .djvu
os.system("djvm -c " + djvu_filename + " " + bashtmp_dir + "/*.djvu")
# Remove the temporary directory
os.system("rm -rf " + bashtmp_dir)
Тем кто предпочитает GUI, советую маленькую программу под оффтопик, которая отлично работает под wine http://djvu-soft0001.nxt.ru/djvu_small_v0_3_1.rar
Занятно...
А если я хочу из OOo вывести текст с картинками в DjVu, то только через PDF?
2 ranma-rus
А если я хочу из OOo вывести текст с картинками в DjVu, то только через PDF?
насколько я знаю, да.. ну можно еще через постскрипт.
Большое спасибо, очень помогло, ценная информация.
Единственное:
В ленни при попытке выполнить
aptitude install djview djvulibre-bin netpbm
aptitude начала ругаться, пришлось через apt-get ставить.
Полутона в резульатате иногда не нужны. Например если это только текстовый документ.
тогда вместо pamditherbw(pgmtopbm) можно использовать pamthreshold.
Качество полученого документа - лучше.
виндовый бесплатный djvu solo 3.1 работает под wine
Спасибо за статью. Думаю, как-нибудь пригодится. Поставь, пожалуйста, ещё ссылку на unpaper, программу для «очистки» сканов. Это существенно улучшает их пригодность для последующего компьютерного использования.
> потому как 12.jpg появится перед 2.jpg
ls -v *.jpg выдаст в правильном порядке :)
$ touch a{1,2,12,20}
$ ls -v a*
a1 a2 a12 a20
$ ls a*
a1 a12 a2 a20
Соответственно, если уже есть неправильно пронумерованные файлы есть, то можно сделать for f in `ls -v *` (потенциальная проблема с пробелами в именах).
Можно, конечно, и переименовать: for f in a* ; do mv ${f} a$(printf "%03d\n" ${f/a/}) ; done
Хочу поделиться своим опытом:
http://theorie5.physik.unibas.ch
/shalaev/my.linux/djvu.html
Преимущество: внешние поля автоматически обрезаются, в результате при последующем распечатывании на бумаге остаётся меньше неиспользованного места, так что текст становится крупнее и меньше устают глаза.
Спасибо всем отписавшимся выше - буду редактировать пост, используя ваши комментарии.
2 jetxee комментирует...
Поставь, пожалуйста, ещё ссылку на unpaper
Поставил. Кстати, полезная программа, я про неё не знал. Спасибо!
2 Анонимный комментирует...
Хочу поделиться своим опытом
Большое спасибо! При следующей правке непременно включу часть текстов в пост!
Спасибо, полезная страничка. Мне приходится нередко конвертировать отсканированные книги tiff --> djvu. Опытным путем пришел к следующему:
1. Весьма эффективно писать маленькие скрипты, исходя из конкретно поставленной задачи, используя при этом базовые утилиты из DjVuLibre (см. man djvu). Качество при этом получается лучше, чем при использовании более общей утилиты pdf2djvu. Например, если конверируется набор черно-белых файлов 0001.tiff, 0002.tiff, ..., состоящих из отсканированных с разрешением 300 dpi изображений, то хорош примитивный скрипт типа:
#!/bin/bash
for i in *.tiff; do
convert -format pbm $i "$i.pbm"
cjb2 -dpi 300 -clean "$i.pbm" "$i.djvu"
rm -f "$i.pbm"
done
Если изображения серые, то:
#!/bin/bash
for i in *.tif; do
convert $i -format pgm "$i.pgm"
c44 -dpi 300 "$i.pgm" "$i.djvu"
rm -f "$i.pgm"
done
И так далее. Идея, думаю, понятна.
2. Спасибо за информацию об unpaper. Буду смотреть. Пока что из всего, что видел, самая эффективная для удаления черных полей и разбиения страниц программа - SkanKromsator (начальный обзор и загрузка програмы - см., напр.: http://www.bible-mda.ru/soft/scankromsator/1-sergeev_v-scankromsator-start-guide.html) - написанная для MS Windows, свободно распространяемая, она без проблем работает через Wine. Одна из немногих виндовз-программ, которые приходится запускать через эмулятор. Но очень хочется получить что-нибудь на GNU/Linux и под GPL.
> Сконвертированные документы DJVU из PDF, как правило, имеют меньший размер и гораздо быстрее просматриваются, что особенно актуально для портативных устройств.
Если вы имеете ввиду PocketPC, то дела обстоят несколько иначе, дело в том, что многие программы при работе с PDF имеют режим "сжатия" текста в экран (примерно как Opera Mini), то есть текст можно читать просто листая верх-вниз. А вот в DJVU такого сделать нельзя. Из-за специфики формата, строчка обрывается на краю экрана и чтобы ее дочитать приходится идти вправо, а как дочитаю строчку, то влево, чтобы увидеть следующую, а это очень раздражает. Разницы в скорости при открытии PDF и DJVU особой нет. По крайней мере у меня
поправьте
Аналогом является программа от Гугл под названием dpf2djvu.
спасибо за упоминание программы gscan2pdf. Мне надо было сконвертировать 200 штук jpeg в один документ djvu. Пять секунд и готово, я жутко доволен. Конечно эстетам нужны решения покруче - а мне и этого вполне хватило.
По поводу множественного переименования файлов - пользуйтесь прекрасной программкой mmv.
Вот в этом блоге хорошо описано: http://tuxedo-live.blogspot.com/2007/07/mmv.html
> Так же можно воспользоваться кодом, предложенным комментатором с OpenNet..
Воспользовался. Работает. Вот только из 200 метров jpeg`ов получился 416 мегабайтный(!) DJVU.
Есил же ваш скрипт использовать, для книжки с изображениями, не только еткст - ужас на выходе (в конкретном случае).
Думаю попробовать gscan2pdf, может меньше получиться...
В любом случае спасибо за статью.
Размер получающегося DjVu очень сильно зависит от используемого алгоритма и его параметров.
Двухцветный чёрно-белый DjVuBitonal (cjb2) сжимает хорошо, но он двухцветный. То есть без градаций серого. Cjb2, кстати, по умолчанию сжимает без потерь (можно ещё сильнее — с потерями).
Понимающий фото и градации серого DjVuPhoto (c44) сжимает хуже, зато он цветной. В новых версиях c44 настройки по умолчанию заточены на получение максимально качественной картинки, а не минимального размера файла, поэтому для получения маленьких файлов нужно играться с параметрами сжатия. По-умолчанию c44 сжимает слабо.
На практике проще использовать cjb2, чем подбирать параметры c44. Однако для cjb2 нужно растеризовать исходник в бо́льшем разрешении (минимум 600 dpi для текста), потому что никакого сглаживания в PBM быть не может и все градации серого можно только сымитировать дизерингом.
Вот мой скрипт для конвертации PDF в DjVu с обрезанием полей. В нём можно задавать желаемое разрешение и алгоритм сжатия опцией командной строки. Я им файлы для электронной читалки обрабатываю.
По скрипту pdfs2djvu имеются следующие замечания:
1) Переменная DPI не используется
2) В конце надо добавить rm *.pbm.djvu , чтобы временные файлы удалить
По скрипту any2djvu-bw я как-то в лоб написал в конце
rm -f *[!#0-bw].djvu
Хотя в идеале нужно оставить самый жирный файл из существующих но это же придумать надо. А тут имя всё равно не критично и так работает без find / xargs /du и т.д.
В цепочке anytopnm $i | ppmtopgm | pgmtopbm -value 0.499 > $i.pbm
получается сбой.
pgmtopbm -value 0.499 (и с другими value результат тот же) почему-то преобразует вполне нормальный pgm в чистую страничку pbm. Кто-нибудь может подсказать в чем может быть дело?
В цепочке anytopnm $i | ppmtopgm | pgmtopbm -value 0.499 > $i.pbm
получается сбой.
pgmtopbm -value 0.499 (и с другими value результат тот же) почему-то преобразует вполне нормальный pgm (смотрела просмотрщиками и gimp'ом - буквы вполне читаемы) в чистую страничку pbm. Кто-нибудь может подсказать в чем может быть дело?
А если в pbm не преобразовывать, а сразу pgm отправить на cjb2 (пробовала с разными dpi и losslevel'ами), то качество текста получается неприемлемо плохое.
Для улучшения сканов есть scan tailor. Он правда уже не особо развивается, но вполне юзабелен.
Действительно, в цепочке
anytopnm $i | ppmtopgm | pgmtopbm -value 0.499 > $i.pbm
где-то происходит ошибка - страница получается девственно чистой.
Юзаю Gentoo, весь софт самых новых версий.
Для себя эту проблему я решил так - заменил строку на
convert $i $i.pbm
convert - это утилита из пакета ImageMagic
Автор, поправь!
Отправить комментарий