Главное > DjVu

Пакетная обработка малоцветных файлов - модификация метода manfred

(1/511) > >>

Xen Xheng:
Здравствуйте, monday2000.

Методом подклейки фото-изображений пользуюсь уже лет пять. Спасибо вам за подробные описания.

Недавно мне попался на глаза файл djvu со страницей, в которой чистые цвета соприкасались без jpg-артефактов. Это меня заставило задуматься, может и я так смогу? Запрос google "JB foreground colors 9 colors" привел на вашу страницу с описанием кодирования малоцветных djvu.

1. Метод manfred с помощью tifftopnm
За день наконец разобрался в работе методом manfred. Я пытался скармливать csepdjvu пустой background.tif (белый цвет, 600dpi). На что он отвечал ошибкой GPixmap.unk_PPM "неизвестный PPM формат файла". Почитав мануал к csepdjvu понял, что background.tif не нужен, если в нем только белое поле.

Покумекал немного с циклами в командных bat-файлах и передачей папки как параметра. В итоге пришел к следующей модификации метода manfred'а. Создаем в папке с файлами manfred такой batch.bat:

--- Код: ---for %%I in ("%~1\*.tif") do tifftopnm "%~1\%%~nxI" | pnmtodjvurle > "%~1\%%~nI.rle"
for %%I in ("%~1\Новая папка\*.tif") do tifftopnm "%~1\Новая папка\%%~nxI" > "%~1\%%~nI.ppm"
for %%I in ("%~1\*.rle") do copy /b "%~1\%%~nxI"+"%~1\%%~nI.ppm" "%~1\%%~nI.sep"
for %%I in ("%~1\*.sep") do csepdjvu -d 600 -q 100,150,200,250 "%~1\%%~nxI" "%~1\%%~nI.djvu"
del "%~1\*.rle" "%~1\*.ppm" "%~1\*.sep"
pause
--- Конец кода ---

Это похоже на очень сильное колдунство, но работает оно так.
Важно: Вытаскиваем на рабочий стол ярлык на batch.bat из папки manfred.
1. Создаем на рабочем столе папку "Новая папка".
2. В нее складываем файлы с CLA содержимым. Называем их традиционно: 0001.tif, 0002.tif и т.д.
3. Создаем здесь же вложенную папку "Новая папка" и складываем в нее файлы с Photo содержимым (я уменьшил разрешение до 300dpi). Называем аналогично: 0001.tif, 0002.tif и т.д.
Если, например, для 2-й страницы нет фото-вклейки, то 0002.tif в этой вложенной папке не создаем.
4. Перетягиваем мышкой папку "Новая папка" (созданную в пункте 1 на рабочем столе) на ярлык batch.bat.
5. Ждем. Вначале создаются все rle. Затем ppm. Потом rle+ppm дают sep. Наконец sep кодируются в djvu. Временные файлы убираются.
6. Все. В папке "Новая папка" находятся отдельные страницы djvu: 0001.djvu, 0002.djvu и т.д.
7. Осталось в DjVu Small закодировать черно-белые страницы, открыть Editor 6.0 и в полученный djvu-файл вставить малоцветные страницы.

Отмечу, что я выставил такие параметры
csepdjvu -d 600 -q 100,150,200,250
Без них получается 300 dpi и фото-вклейки с качеством по умолчанию -q 72,83,93,103
Захотелось качество фото сделать получше.
-q 100,150,200,250 - это первая попытка, и то что получилось меня устроило.

Проблема. После фотошопа tifftopnm дает предупреждение
"unknown field with tag 34665 (0x8769) encountered",
но продолжает работать, и djvu получаются.
Пересохранение в IrfanView решает проблему.

2. Второй подход к снаряду - замена tifftopnm на IrfanView.
Также пробовал создавать pbm через IrfanView, но получил только черно-белый файл. После чего использование IrfanView для этих целей отбросил. И вот подумал, а зачем pbm (Portable Bitmap) - это же битмап (маска) - одноцветная по определению. Надо попробовать ppm (Portable Pixelmap) - цветной формат.

Итак, помещаем файл i_view32.exe в папку manfred и создаем в ней ibatch.bat:

--- Код: ---for %%I in ("%~1\*.tif") do start /w i_view32 "%~1\%%~nxI" /convert="%~1\%%~nI.ppm"
for %%I in ("%~1\*.tif") do pnmtodjvurle < "%~1\%%~nI.ppm" > "%~1\%%~nI.rle"
del "%~1\*.ppm"
for %%I in ("%~1\Новая папка\*.tif") do start /w i_view32 "%~1\Новая папка\%%~nxI" /convert="%~1\%~nI.ppm"
for %%I in ("%~1\*.rle") do copy /b "%~1\%%~nxI"+"%~1\%%~nI.ppm" "%~1\%%~nI.sep"
for %%I in ("%~1\*.sep") do csepdjvu -d 600 -q 100,150,200,250 "%~1\%%~nxI" "%~1\%%~nI.djvu"
del "%~1\*.rle" "%~1\*.ppm" "%~1\*.sep"
pause
--- Конец кода ---

Все работает. Фотошоп уже не страшен.

Метод позволяет кодировать фото-фон на всю страницу.

Проблема. Чтобы фон подклеился, его размер в уменьшенном разрешении должен соответствовать переднему слою. Я так понял, что размер переднего слоя в пикселах должен быть кратен нацело фону.

3. Один малоцветный djvu на выходе. Фотослой через DjVu Imager

--- Код: ---set name=
for %%I in ("%~1\*.sep") do set name=!name! "%~1\%%~nxI"
csepdjvu -d 600 -q 100,150,200,250 %name% "%~1\1.djvu"
--- Конец кода ---
Этот код позволяет получить на выходе один многостраничный малоцветный djvu файл.

Проблема. Если подредактировать какой-либо файл в фотошопе его дата изменится, и в списке файлов для цикла он пойдет самым последним (это если FAT32, а  вот NTFS сама сортирует по алфавиту), нарушая последовательность страниц. Можно конечно прогнать еще раз пакетно через IrfanView. Но это полумеры.

Решил проблему сортировки имен файлов.
Подклейку фото-слоя можно осуществлять стандартным способом через Djvu Imager.

Итак, командный файл, который путем перетаскивания папки на его ярлык преобразует папку с малоцветными tif файлами в малоцветный многостраничный 0001.djvu на рабочем столе пользователя.
В этой же папке можно создать вложенную папку с tif-файлами фото-слоя. Папка с фото-слоем никак не влияет на процесс обработки малоцветного файла (она может быть, а может и не быть).

--- Код: ---Setlocal EnableDelayedExpansion
for %%I in ("%~1\*.tif") do (
start /w i_view32 "%%I" /convert="%~1\%%~nI.ppm"
pnmtodjvurle < "%~1\%%~nI.ppm" > "%~1\%%~nI.sep"
del "%~1\%%~nI.ppm"
)
for %%I in ("%~1\*.sep") do echo %%I >> "%~1\files.txt"
set name=
for /F "usebackq delims=" %%I in (`sort "%~1\files.txt"`) do set name=!name! "%%I"
csepdjvu -d 600 %name% "%USERPROFILE%\Рабочий стол\0001.djvu"
del "%~1\*.sep" "%~1\files.txt"
pause
"%USERPROFILE%\Рабочий стол\0001.djvu"
--- Конец кода ---
После создания малоцветного djvu запускаем Djvu Imager (можно параллельно).
Направляем его на папку с фотослоем.
Выбираем нужный делитель и качество.
Запускаем процесс. Ждем.
Вставляем в малоцветный djvu.

Все. Радуемся результату [0.1Mb]
http://rusfolder.com/40149470

Модифицированный пакет manfred [0.6Mb]
http://rusfolder.com/40149468

Папка с исходными tif-файлами [15Mb]
http://rusfolder.com/40149469

textsharik:
Эти скрипты были бы очень полезны пару лет назад. Сейчас малоцветное кодирование можно сделать одним нажатием кнопки в программе "Djvu Small Mod" (см. соответствующую тему на этом форуме).
Просто выберите профиль "Малоцветное кодирование", всё остальное - как в обычном Djvu Small.
Если нужно малоцветное кодирование с подклейкой фона - включаете ручной режим в настройках сегментера, и задаёте систему наименования в настройках SEP.

Работает примерно в 10 раз быстрее, чем метода manfred'a, и не требует гигабайты для хранения промежуточных SEP-файлов.
Качество сжатия фона задаётся не четырьмя абсолютными параметрами, которые нужно подгонять под каждую ситуацию, а так же, как в обычном Djvu Small - одним числом, в процентах.

Xen Xheng:
Именно этого мне так не хватало.
Спасибо большое за программу.

veala:
XX17BeBeAnZaSoLePhIITrAtUnUnXVSoXVClMiXVCoAlAlAtBrGSWiSyAlKi
XIHaOLSwHaTuPaPhBlSKTVReClDaCDSpTeJeCDSaXVMaHaReElVeviToJe
XIteChMeRASHTbSaCDCDFaBoXIWiJoKiGiNoXVCDCDBuXbSwRIHepkGrAu
KaGuRCSEArHoAlHoHaAgFeJeAmCaGrPeSoFiGePaadWeNoGoAsSeJaHAII
XISaRCXICaMiNoWiCDSyLeRCSwInWaPaDGAdDLErIIReSoVaNDThBlBaZi
WiDVkeARJoDrSiLiWhNaStThGUAiHeRiSwFyItXVXIXXIIXIMoViXVOvDV
ThPRXXWhJoScPoInStJaThSeToVIIIRaEdThJaIIXIChPuThWaKeLuUlPr
ThInTeRCDePaNaosReStThThDiXXCDNaAnJu

veala:
II16BeBeниассепркнiiPrFaMiFSреMeXXRoJeниSrздPrкнElососBrPHCr
PaLoCaСчорроедGiErPaасFrAyГЭUmPaCoосNoXXниJeниазDrNoRAазSp
кнHeеверXIGeосThучDiFIPuJoерздерикдереFIысздWiFuInXIосднер
DiедFMStIvArFrвтZeAgтостXIкнJoHaвттаCaLoFlAnXIерSaArльEFFl
XXасFMItпоMiNaXVBaDeапFMZSвтInолслZSVAYoPiарAcахаселысpoас
ятSoiBагубReBoомESсотоThAnнаSaакажобовXXедедскоснириедтипр
титипеодVeтитиRaSMтиднDiKeLaPeKoкориебXIAlреспудедGhJiльос
SiGoраFMDDMoноHoDeосDeElThелSMacыкUr

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии