Разобрать и собрать djvu
Модератор: Модераторы разделов
Разобрать и собрать djvu
Подскажите, пожалуйста, есть ли в Лине способ разобрать djvu файл на множество jpg или png изображений для последующей пакетной обработки (с этим как-нибудь разберусь), а потом собрать все эти страницы обратно в один файл djvu или pdf?
Дело в том, что есть у меня одна книга. Книга хорошая, но отсканирована ужасно: 1 битная глубина цвета, просто 100% чёрные буквы и 100% белый фон. Из-за такой контрастности и резких краёв символов при чтении глаза устают буквально за пару минут. Я пробовал в качестве эксперимента делать скриншот и обработать картинку в Гимпе. Добавил размытие на 3px и уменьшил контрастность на 10% - стало намного лучше. Хотелось бы проделать это со всей книгой, но вручную - нереально.
Заранее благодарю за помощь.
Дело в том, что есть у меня одна книга. Книга хорошая, но отсканирована ужасно: 1 битная глубина цвета, просто 100% чёрные буквы и 100% белый фон. Из-за такой контрастности и резких краёв символов при чтении глаза устают буквально за пару минут. Я пробовал в качестве эксперимента делать скриншот и обработать картинку в Гимпе. Добавил размытие на 3px и уменьшил контрастность на 10% - стало намного лучше. Хотелось бы проделать это со всей книгой, но вручную - нереально.
Заранее благодарю за помощь.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Разобрать и собрать djvu
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Разобрать и собрать djvu
За ссылку благодарю. Но только там нет про раскодирование в отдельные файлы для каждой страницы, а только в многостраничные tiff и т.п. Шило на мыло фактически...
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Разобрать и собрать djvu
Неужто нет утилит для работы с многостраничными tiff? А если найду нагуглю?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Разобрать и собрать djvu
Нашел, спасибо. Уже конвертирую.. Потом ещё нужно найти сборку обратно в djvu из png (tiff похоже не поддерживает 256 оттенков серого). Как сделаю, выложу все команды.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Разобрать и собрать djvu
Есть подозрение, что собирать обратно djvu Вам не стоит, поскольку резкие контуры текста - особенность формата. То есть, может, Вы от них и избавитесь, но тогда сильно проиграете в плане объёма.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Разобрать и собрать djvu
Bizdelnick писал(а): ↑30.11.2012 11:24Есть подозрение, что собирать обратно djvu Вам не стоит, поскольку резкие контуры текста - особенность формата. То есть, может, Вы от них и избавитесь, но тогда сильно проиграете в плане объёма.
Так и вышло: 273Мб против 2.4МБ исходных. И загрузка страниц занимает по несколько секунд. Однако, оно того стоило, ибо иначе читать просто невозможно. А 300МБ сегодня - это ерунда...
Как и обещал, команды. Сначала создадим многостраницный tiff файл из исходного djvu:
Код: Выделить всё
ddjvu -format=tiff source_file.djvu tmp_file.tiff
Затем создадим из этого tif файла набор одностраницных tiff файлов:
Код: Выделить всё
tiffsplit tmp_file.tiff
И тоге в папке будет множество tiff файлов с именами типа xaaa.tiff, xaab.tiff? xaac.tiff и т.д. Далее скрипт:
Код: Выделить всё
#!/bin/bash
let n=1
for i in *.tif; do
j="page-$n.png"
convert $i -colorspace Gray -gaussian-blur 3 -brightness-contrast 0x-10 "tmp/$j"
z=`basename $j .png`
convert "tmp/$j" "tmp/$z.pgm"
cpaldjvu -dpi 300 -colors 256 "tmp/$z.pgm" "tmp/$z.djvu"
if [ $n = 1 ]; then
djvm -c nihongo.djvu "tmp/$z.djvu"
else
djvm -i nihongo.djvu "tmp/$z.djvu"
fi
n=$[n+1]
done
Я не силён в написании скриптов, поэтмоу тут вероятн оможно что-то и улучшить. Идея такая: сначала каждый файл (страница) командой
Код: Выделить всё
convert $i -colorspace Gray -gaussian-blur 3 -brightness-contrast 0x-10 "tmp/$j"
конвертируется в png с применением размытия на 3px и уменьшением контрастности на 10%. Далее он конвертируется в формат pgm (почему-то напряму из tiff в pgm не получается - всё равно 1 бит):
Код: Выделить всё
convert "tmp/$j" "tmp/$z.pgm"
Следующий шаг - конвертация изображения в одностраничный djvu:
Код: Выделить всё
cpaldjvu -dpi 300 -colors 256 "tmp/$z.pgm" "tmp/$z.djvu"
Затем из первой страницы создаём итоговый файл, а все остальные добавляем в него:
Код: Выделить всё
if [ $n = 1 ]; then
djvm -c out_file.djvu "tmp/$z.djvu"
else
djvm -i out_file.djvu "tmp/$z.djvu"
fi
Результат выглядит так:
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Разобрать и собрать djvu
А контрастность сознательно была уменьшена?
Лично мне первый вариант читать проще, второй на мой взгляд слишком уж замыленный, Видимо, дело вкуса.
Лично мне первый вариант читать проще, второй на мой взгляд слишком уж замыленный, Видимо, дело вкуса.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Разобрать и собрать djvu
Да, сознательно. Высокая контрастность тоже глазам неприятна. Потом аж всё «плывёт».
На первый взгляд первая картинка и правда лучше, но очень утомляет глаза буквально за пару минут чтения. Второй же вариант можно читать сколько угодно долго.
На первый взгляд первая картинка и правда лучше, но очень утомляет глаза буквально за пару минут чтения. Второй же вариант можно читать сколько угодно долго.
Re: Разобрать и собрать djvu
Нашел решение лучше - сконвертировал в pdf. Во-первых, он работает намного быстрее - вообще нет задержек открытием страниц. Во-вторых, он весит в 3 раза меньше (81МБ против 273МБ). По всем параметрам намного лучше. Одна проблема: если попробовать сконвертировать через convert все png в pdf (команда convert *png out_file.pdf), то съедаются все 4ГБ оперативки и программа вылетает. Вероятно, утечка. Поэтому решение такое:
Код: Выделить всё
#!/bin/bash
let n=1
for i in *.tif; do
j="page-$n.pdf"
convert $i -colorspace Gray -gaussian-blur 3 -brightness-contrast 0x-10 "tmp/$j"
n=$[n+1]
done
gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out_file.pdf tmp/*.pdf
rm -f tmp/*.pdf
Спасибо сказали: