Программа для извлечения и замены иллюстраций в .fb2-книгах
На страницу 1, 2  След.
 
Найти сообщения без ответов
Начать новую тему   Ответить на тему    Список форумов The-eBook -> Программное обеспечение
 
Автор Сообщение

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 14.10.2010 13:18     Цитата

(зеркала: http://lib.rus.ec/node/244581 и http://www.the-ebook.org/forum/viewtopic.php?t=15947)

Дарю обществу: fb2bin - извлекалка/заменялка двоичных вложений (картинок, MIDI-файлов и прочего) в .fb2-файлах. Возможности:
  • проверка целостности вложений и вывод их списка с размерами в байтах;
  • извлечение вложений в виде файлов в указанный каталог;
  • замена вложений на имеющиеся в указанном каталоге файлы.

В ближайших планах - сличение вложений с файлами; обработка вложений .bat-файлами или иными скриптами.
Программа запускается с командной строки, может принимать и отдавать FB2-файлы через стандартный ввод/вывод (т.е. использоваться как фильтр). При запуске без параметров даёт подсказку о способе вызова подсказки Smile - правда, по-английски; даю краткий перевод:
Цитата:
fb2bin - список/извлечение замена двоичных вложений в FB2-файлах, (версия, дата)
Вдохновлено форумом о программах для "ебуководов"
Использование:
fb2bin -h
fb2bin -l [ -vqfi ] fb2-файл
fb2bin -x [ -vqfid путь ] исходный-fb2 [ id-вложения ... ] [ @список-id'ов-вложений ... ]
fb2bin -r [ -vqfd путь ] исходный-fb2 выходной-fb2 [ id-вложения ... ] [ @список-id'ов-вложений ... ]
Команды:
-h, --help - подсказка
-l, --list - показать список вложений
-x, --extract - извлечь вложения в файлы
-r, --replace - заменить вложения на файлы
Аргументы:
исходный-fb2, выходной-fb2 - имена файлов, либо "-" - входной и выходной поток соответственно
id-вложения - один или более идентификаторов извлекаемых/заменяемых вложений (если не указано - будут обрабатываться все вложения)
список-id'ов-вложений - один или более файлов, содержащих идентификаторы обрабатываемых вложений
Опции:
-q, --quiet - режим "молчун" (выдаются только сообщения об ошибках; удобно для батничков; если задать дважды - будет вообще ничего не сообщаться)
-v --verbose - режим "болтун" (полезно, когда что-то идёт не так и хочется узнать причины происходящего; если задать дважды - будет ещё болтливее)
-f, --far-extension - режим расширенной поддержки Far Manager'а (http://www.farmanager.com)
-i, --ignore-invalid - игнорировать невалидность description'а исходного FB2 (может вызвать странные глюки)
-d, --base-dir=путь - каталог, куда складывать / откуда брать файлы (по умолчанию - текущий каталог)
Коды ERRORLEVEL (для использования в .bat-файлах):
0 - всё сделано ОК;
1 - всё сделано, но возможно, что выходной(-ые) файл(ы) невалиден(-ны)
2 - невалидный исходный файл - выполнение невозможно
3 - приключилась фатальная ошибка (скорее всего - нехватка памяти либо места на диске, но может быть и ошибка лично моя; имеет смысл попробовать ещё раз с увеличенным уровнем "болтливости", если всё равно непонятно - спросить у меня)
4 - ошибка в параметрах командной строки.

Пример применения - для замены прозрачных картинок в FB2-книге на обычные:
Цитата:
@echo off
: извлекаем:
fb2bin -x -d . Kalma_Sirotyi_kvartala_Belvill.192080.fb2
: убираем не-png'шное:
del *.jpg
: делаем непрозрачные:
limpng -r *.png
: возвращаем первоначальные имена:
del ?????.png
ren *.png ?????.*
: минимизируем размер файлов (в отдельный подкаталог):
optipng -O7 -d opti\ *.png
: загоняем обратно в FB2:
fb2bin -r -d opti\ Kalma_Sirotyi_kvartala_Belvill.192080.fb2 - >kalma.fb2

Ну и, само собой, исходники тоже лежат - вдруг кому-то пригодится. Кто найдёт ошибку или предложит доработку - делитесь! Smile
18/10/2010: выложена версия 1.1.
Исправлена пара мелких, но неприятных ошибок. Подправлен интерфейс, улучшен вид выходного FB2-документа (аккуратнее сделаны отступы при изменяемых полях), заменён движок на более компактный и шустрый - программа "похудела" в тридцать раз, с 600 до 20 килобайт - не пугайтесь, это не вирус! Smile
Как обычно - с исходниками.
19/10/2010: версия 1.2.
Добавлена поддержка неюникодных кодировок (в т.ч. windows-1251) - оказывается, XML-движок их не поддерживал. Теперь поддерживает - я его переделал. Правда, без перекодировки - изменённый файл сохраняется в той же кодировке, что и исходный. Извиняюсь за невнимательность, скачавших предыдущие версии прошу скачать свежую.
28/10/2010: версии 1.3 (к вечеру уже устарела Sad ) и 1.4.
Исправлена мелкая ошибка с порядком разбора тэгов; добавлена опция "не проверять валидность description'а FB2-документа" при просмотре списка вложений и их выгрузке; добавлена возможность выборочной обработки вложений с целью интеграции с Far Manager'ом; добавлен режим полного подавления вывода сообщений.
02/11/2010 - версия 1.5
  • Добавлена возможность передачи id'ов обрабатываемых вложений списковыми файлами - гл. обр. для сокращения количества запусков программы при массированных обработках и для удобства использования с Far'ом;
  • расширена поддержка Far Manager'а - пока это только генерация псевдовложения с id="dirinfo" и вывод в него ID'а документа и номера версии (в планах - псевдовложение с id="files.bbs" или "descript.ion" с описаниями картинок (из атрибута title тэга image, из следующего за иллюстрацией текста и т.д.); если кто захочет - добавлю вывод ещё чего-ньдь полезного);
  • в поставку включен файл custom_user.ini - пример использования программы в качестве архиватора для Far'а.


Последний раз редактировалось: Дотошный Рыжик (03.11.2010 19:13), всего редактировалось 7 раз(а)
 
Профиль Сообщение ^

redboy
Продвинутый участник форума

Продвинутый участник форума



Зарегистрирован: 21.07.2010
Сообщения: 98


Откуда: Saint Petersburg/Moscow

СообщениеДобавлено: 14.10.2010 13:55     Цитата

Дотошный Рыжик
Ура! Спасибо большое - обязательно гляну. Начну с тестового файла, а потом ребятенка порадую картинками
 
Профиль Сообщение ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 08.06.2007
Сообщения: 4589


Откуда: Москва

СообщениеДобавлено: 14.10.2010 14:03     Цитата

Дотошный Рыжик
Спасибо, будем пытать! Smile
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
Профиль Сообщение E-mail ^

u#74
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 28.08.2010
Сообщения: 2845


Откуда: Samara

СообщениеДобавлено: 14.10.2010 14:22     Цитата

Спасибо, в хозяйстве пригодится...
Люблю консольные полезняшкиSmile
_________________
А бесконечно-самоедские расовые фашисты и их вахтёрские фюрерюгенд-прихвостни могут идти на йух.
 
Профиль Сообщение ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 08.06.2007
Сообщения: 4589


Откуда: Москва

СообщениеДобавлено: 14.10.2010 15:04     Цитата

После обработки:
- перевод строки 0D0A заменен на 0A;
- явно указанный неразрывный пробел #160; заменен на C2A0.
Оно может идеологически и верно, но если при создании книги сделано именно так, а не иначе, то может не стоит менять...
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
Профиль Сообщение E-mail ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 14.10.2010 15:25     Цитата

kaznelson
Ё-пс!.. Это не я - это libxml2! Кинь fb2'шку (или скажи, где лежит) - поиграюсь.
 
Профиль Сообщение ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 08.06.2007
Сообщения: 4589


Откуда: Москва

СообщениеДобавлено: 14.10.2010 15:27     Цитата

Дотошный Рыжик
Проверял на тестовой книге:
http://www.the-ebook.org/forum/viewtopic.php?t=15702

Сравнивал в Beyond Compare, егойным Hex Viewer'ом.

С распаковкой-паковкой, кстати, всё в порядке.
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
Профиль Сообщение E-mail ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 14.10.2010 15:51     Цитата

kaznelson
Скачал, смотрю.
kaznelson писал(а):
перевод строки 0D0A заменен на 0A
Таки да. Sad Буду искать, где грабля.
kaznelson писал(а):
явно указанный неразрывный пробел #160; заменен на C2A0
Не нашёл. Все "&#160" заменены на символ с кодом 160 (hex A0) - таки да, но ИМХО это норма. А кто такой "C2A0"?

Posted after 3 minutes 15 seconds:

Дотошный Рыжик писал(а):
явно указанный неразрывный пробел
А-аа, понял: надо было оставить "&#160", чтобы сохранялась "тестовость" файла?
 
Профиль Сообщение ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 08.06.2007
Сообщения: 4589


Откуда: Москва

СообщениеДобавлено: 14.10.2010 16:06     Цитата

Дотошный Рыжик писал(а):
А кто такой "C2A0"?
C2 - первый байт двухбайтовки C2A0, которая обозначает   он же &#160. Как 0xC2A0 представляется в UTF-8 (в UTF-16 - 0x00A0).



Дотошный Рыжик писал(а):
А-аа, понял: надо было оставить "&#160", чтобы сохранялась "тестовость" файла?
Ну и править, если что, нагляднее. Такие символы зачастую специально ставят - не в hex-редакторе же смотреть, где живут нужные спецсимволы...
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
Профиль Сообщение E-mail ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 14.10.2010 16:44     Цитата

kaznelson
Ага. Это тоже на совести libxml2, буду её копать и вправлять мозги... Я эту библиотеку всего неделю как в глаза увидел! Smile

Posted after 3 hours 48 minutes 51 seconds:

kaznelson
Полистал исходники libxml2. Увы - ни про "&#nnn", ни про 0D0A ничего утешительного сказать не могу - и то и другое неконфигурабельно и намертво вшито в исходнике в десятках мест. Sad
Впрочем, можно попробовать заменить libxml2 на что-то более другое, поспрошаю у людей... Confused
 
Профиль Сообщение ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 08.06.2007
Сообщения: 4589


Откуда: Москва

СообщениеДобавлено: 15.10.2010 13:16     Цитата

Дотошный Рыжик
Боюсь сморозить глупость, но микрософтовский XML-парсер не подойдёт? Или нужна кроссплатформа с исходниками?
Или такие:
http://xmlpp.sourceforge.net/
http://xerces.apache.org/xerces-c/
http://www.applied-mathematics.net/tools/xmlParser.html
http://www.firstobject.com/dn_markup.htm
http://www.codeproject.com/KB/XML/CXMLFile.aspx
http://www.grinninglizard.com/tinyxml/
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
Профиль Сообщение E-mail ^

redboy
Продвинутый участник форума

Продвинутый участник форума



Зарегистрирован: 21.07.2010
Сообщения: 98


Откуда: Saint Petersburg/Moscow

СообщениеДобавлено: 15.10.2010 14:55     Цитата

Дотошный Рыжик
Простите мне непроходимую тупость, но не могли бы вы написать командную строку для преобразования (extract and replace, как минимум) - чтобы я не делал внятного результата не получил. Ну кроме что получение списка картинок из файла... Confused
 
Профиль Сообщение ^

a_lone
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 16.09.2004
Сообщения: 1704



СообщениеДобавлено: 15.10.2010 19:03     Цитата

Дотошный Рыжик
к сожалению, чтобы утилитка делала просто замену картинок, нужно делать ручной парсинг (любой сторонний парсер будет умничать). собственно, в этом ничего сложного нет, и использовать xml-библиотеки нет необходимости
_________________
Palm T|X, V3Ext, SGS
Kindle 3 3G -> Sony PRS-650BC -> Nook Touch -> Kindle Paperwhite
 
Профиль Сообщение ICQ ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 17.10.2010 01:02     Цитата

kaznelson писал(а):
микрософтовский XML-парсер не подойдёт?
Кгм... Я эти парсеры в глаза вижу всего-то неделю. Конечно, хотелось бы что-то маленькое, удобное для ковыряния отладчиком (поэтому опен-сорсные весьма предпочтительны), кроссплатформенное и обязательно написанное на чистом Си без плюсплюса. Sad (Ну не люблю я C++, не место ему в консольных прогах в пару сотен строк размерам!)
Пока выкинул libxml2 и заменил его на MiniXML - в результате упростился код, а exe'шник резко похудел с 1200 до 45 килобайт (600 и 19 кил соответственно после UPX'а). Но у MiniXML'а свои мухи... Sad

redboy писал(а):
не могли бы вы написать командную строку для преобразования (extract and replace, как минимум)
Добавил в стартовый пост.

a_lone писал(а):
чтобы утилитка делала просто замену картинок, нужно делать ручной парсинг [...] и использовать xml-библиотеки нет необходимости
Совсем без парсинга бинарные вложения выдираются и заменяются "на раз", но только при условии, что каждый binary начинается строго с новой строки (плюс нужны некоторые телодвижения указателем чтения файла или позицией чтения в буфере, чтобы ненароком не порвать тэги между итерациями), но кроме того, хотца ещё и отметиться в program-used, version и history, а без xml'а сильно трахоёмко. Но парсить FB2 вручную ещё трахоёмче - слишком уж до фига подробностей придётся держать в голове, тем более что я таки раньше с XML'ом не программировался - поэтому LOD! (Let others do!) Smile
 
Профиль Сообщение ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 18.10.2010 13:37     Цитата

Mini-XML (http://www.minixml.org/) годится; с мухами справился и подпатчил обработку entities'ов на свой вкус - за вечер; полдесятка использованных функций добавили к объёму готового exe'шника всего пару килобайт; короче - рекомендую! Smile
 
Профиль Сообщение ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 08.06.2007
Сообщения: 4589


Откуда: Москва

СообщениеДобавлено: 18.10.2010 16:54     Цитата

Дотошный Рыжик
А новое программко?... Smile
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
Профиль Сообщение E-mail ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 19.10.2010 01:07     Цитата

kaznelson писал(а):
А новое программко?...
Уже лежит.
Граблю с &#160 исправил тупо в лоб - отключил нахрен обработку entities (т.е. никакие &amp'ы, &lt'ы и прочее при чтении не заменяются на одиночные символы, а при записи не заменяются символы на имена).
Ошибкой OA новая библиотека не страдает изначально (поскольку процесс создания выходного файла управляется не библиотекой, а её пользователем: сначала нужно создать файл fopen()'ом, а потом натравить функцию mxmlSaveFile() на созданный FILE*).
 
Профиль Сообщение ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 08.06.2007
Сообщения: 4589


Откуда: Москва

СообщениеДобавлено: 19.10.2010 09:58     Цитата

Дотошный Рыжик
Работает, спасибо.
Однако теперь большим минусом комплекта является невозможность limpng.exe перезаписывать файлы или складывать их в другую папку с оригинальным именем.
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
Профиль Сообщение E-mail ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Зарегистрирован: 04.02.2009
Сообщения: 2985


Откуда: Юго-Запад СССР

СообщениеДобавлено: 19.10.2010 22:09     Цитата

Опять обновил - нашёл граблю, пришлось срочно править.
kaznelson писал(а):
невозможность limpng.exe перезаписывать файлы или складывать их в другую папку с оригинальным именем
Делаю. Я его несколько запустил и давно не доводил до пригодного к выкладыванию вида - теперь надо сразу много переделывать. Sad
 
Профиль Сообщение ^

redboy
Продвинутый участник форума

Продвинутый участник форума



Зарегистрирован: 21.07.2010
Сообщения: 98


Откуда: Saint Petersburg/Moscow

СообщениеДобавлено: 21.10.2010 10:49     Цитата

Дотошный Рыжик
Наконец дошли руки глянуть, что и как... Спасибо большое - результат отличный!
Единственное пожелание объединить разрозненные exe-шники (темы на счет прозрачных картинок) в один, чтобы уже не задумываться (снова пришлось малость помучиться, т.к. если не знаешь о другом форуме (теме) где эти проги представлены - limpng и optipng, то результата не будет Wink
P.S. Не очень понял зачем optipng - по размеру файлы одинаковы, картинка тоже не увеличивается
 
Профиль Сообщение ^
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов The-eBook -> Программное обеспечение Часовой пояс: GMT + 4
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

© The-eBook, 1999-2014. © Design by Prohorenkov
Syndicating News | Powered by phpBB © 2001, 2005 phpBB Group.
Хостинг предоставлен компанией DatForce     Яндекс.Метрика