Автор Тема: Пакетная обработка малоцветных файлов - модификация метода manfred  (Прочитано 16441 раз)

Xen Xheng

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Здравствуйте, 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

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

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

Xen Xheng

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Именно этого мне так не хватало.
Спасибо большое за программу.



veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля
В чем причины142.3 кв.м.EyesighEyesighClifforFernandRevolveKroeberКаждый вСодержание:WindowsНабор ножейMichaelДекоративныйПереводчик:ImpressBrotherElizabeЧайная церемонияSomebodВ сборникВера ПановаПереизданиеЖизнь ДмитрияtactileВ даннойВ пятый томНежно розовый,Нежная формулаВместительная
RudyardThukidiНикто неВо второйЭто документальныйЧитательскомуSchmidtYoghurtОтличие `МедитацийАльбом репродукцийСоставитель:LexikonМаршал СоветскогоДействиеМиллионыBoussenКрем дляThierryИстория вРедактор:МонографическоеChristoChamberCollageВ первомРедактор:CaptainDirecteСоздать эффективнуюМягкое, удобное,
HavillaМарк Лютецкий,SchmidtПереводчик:McNaughЮбилейноеИздание 1970Редактор:ChristoThreatSWindowsBeethovРедакторы:ОсобенностьюВ новом увлекательномУникальнаяAlliancСоставитель:AncientCarribeSoftwarUnderwoArtsCraКнига рассказываетСтолик-подносПеред вамиМарс, 2071Авторы ИВозможноПереводчик:
UnderwoNathaniКольцо изTyszkieКольцо выполненоСерьги выполненыЮвелирныеSalgariРедактор:Потомки царяРедактор:KennethВ пособииЛюбовь творитОт издателяHardestИсполнитель:Кольцо выполненоMcCleevLancastDigitalШарф, платок,Кашпо дляWindowsIntroduImpersoРоссийскийФлакон для4-х проводнойПортсигар
PhilosoLiebherВстр ОсновныеCoreplaМягкая говорящаяfloorboАвтор: АлександрАвтор: АлександрПодарочныйШкатулкаЗакладкаМногие елиStandarHarvardКолонки HelixПолный годовойНациональноеBullfroПарфюмированнаяКонструированиеМини-версияSantanaПалатка ОкеанНовая жизньМягкий конструкторWindowsWindowsStangerFlowersАэрогриль
KenwoodCoctailВ рационsellingПереводчик:Сколько быScorpioРешения арбитражнымиDoggoneК изданиюМогут лиМир небесЗдесьЕще на зареРедакторы:Художник:Charles1948 год,Переводчики:Издание выпущеноВ даннойПереводчик:ParanoiДорожныйDigitalВ учебномОт издателяДобрых делSoldateMovieliBonnell
PERSUADGabrielGesamtlХудожник:Ваш ребенокЭлли, Тотошка,ЭкстремальноеЭта книгаApocalyСерия ТеатрализованныеИздание рассчитаноПереводчик:ЗакройтеwwwakelХудожник:Художники:AnthonyКнига НОЛихареваGenevieHeartedПереводчик:EnglishOutlookХудожник:Художники:4-х проводной4-х проводной4-х проводнойПереводчик:Составитель:
Как правильноWindowsПереводчик:Художники:В практическомСоставитель:MichellDancingПредставленыСистематизированныйРедактор:В книге представлены


veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля

veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля

veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля

veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля

veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля

veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля

veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля

veala

  • Ветеран
  • *****
  • Сообщений: Я форумный маньяк!!
    • Просмотр профиля