Разобрать и собрать djvu

Работа с различными видами графики, изображений, решение проблем

Модератор: Модераторы разделов

Kemaweyan
Сообщения: 12
ОС: Gentoo Linux AMD64

Разобрать и собрать djvu

Сообщение Kemaweyan »

Подскажите, пожалуйста, есть ли в Лине способ разобрать djvu файл на множество jpg или png изображений для последующей пакетной обработки (с этим как-нибудь разберусь), а потом собрать все эти страницы обратно в один файл djvu или pdf?

Дело в том, что есть у меня одна книга. Книга хорошая, но отсканирована ужасно: 1 битная глубина цвета, просто 100% чёрные буквы и 100% белый фон. Из-за такой контрастности и резких краёв символов при чтении глаза устают буквально за пару минут. Я пробовал в качестве эксперимента делать скриншот и обработать картинку в Гимпе. Добавил размытие на 3px и уменьшил контрастность на 10% - стало намного лучше. Хотелось бы проделать это со всей книгой, но вручную - нереально.

Заранее благодарю за помощь.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Разобрать и собрать djvu

Сообщение Bizdelnick »

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Kemaweyan
Сообщения: 12
ОС: Gentoo Linux AMD64

Re: Разобрать и собрать djvu

Сообщение Kemaweyan »

За ссылку благодарю. Но только там нет про раскодирование в отдельные файлы для каждой страницы, а только в многостраничные tiff и т.п. Шило на мыло фактически...
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Разобрать и собрать djvu

Сообщение Bizdelnick »

Неужто нет утилит для работы с многостраничными tiff? А если найду нагуглю?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Kemaweyan
Сообщения: 12
ОС: Gentoo Linux AMD64

Re: Разобрать и собрать djvu

Сообщение Kemaweyan »

Нашел, спасибо. Уже конвертирую.. Потом ещё нужно найти сборку обратно в djvu из png (tiff похоже не поддерживает 256 оттенков серого). Как сделаю, выложу все команды.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Разобрать и собрать djvu

Сообщение Bizdelnick »

Есть подозрение, что собирать обратно djvu Вам не стоит, поскольку резкие контуры текста - особенность формата. То есть, может, Вы от них и избавитесь, но тогда сильно проиграете в плане объёма.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Kemaweyan
Сообщения: 12
ОС: Gentoo Linux AMD64

Re: Разобрать и собрать djvu

Сообщение Kemaweyan »

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
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Разобрать и собрать djvu

Сообщение Bizdelnick »

А контрастность сознательно была уменьшена?
Лично мне первый вариант читать проще, второй на мой взгляд слишком уж замыленный, Видимо, дело вкуса.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Kemaweyan
Сообщения: 12
ОС: Gentoo Linux AMD64

Re: Разобрать и собрать djvu

Сообщение Kemaweyan »

Да, сознательно. Высокая контрастность тоже глазам неприятна. Потом аж всё «плывёт».

На первый взгляд первая картинка и правда лучше, но очень утомляет глаза буквально за пару минут чтения. Второй же вариант можно читать сколько угодно долго.
Спасибо сказали:

Kemaweyan
Сообщения: 12
ОС: Gentoo Linux AMD64

Re: Разобрать и собрать djvu

Сообщение Kemaweyan »

Нашел решение лучше - сконвертировал в 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
Спасибо сказали: