Программа для извлечения и замены иллюстраций в .fb2-книгах
Goto page 1, 2  Next
 
View unanswered posts
Post new topic   Reply to topic    The-eBook Forum Index -> Программное обеспечение
 
Author Message

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 14.10.2010 13:18     Quote

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

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

В ближайших планах - сличение вложений с файлами; обработка вложений .bat-файлами или иными скриптами.
Программа запускается с командной строки, может принимать и отдавать FB2-файлы через стандартный ввод/вывод (т.е. использоваться как фильтр). При запуске без параметров даёт подсказку о способе вызова подсказки Smile - правда, по-английски; даю краткий перевод:
Quote:
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-книге на обычные:
Quote:
@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'а.


Last edited by Дотошный Рыжик on 03.11.2010 19:13; edited 7 times in total
 
View user's profile Send private message ^

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

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



Joined: 21 Jul 2010
Posts: 98


Location: Saint Petersburg/Moscow

PostPosted: 14.10.2010 13:55     Quote

Дотошный Рыжик
Ура! Спасибо большое - обязательно гляну. Начну с тестового файла, а потом ребятенка порадую картинками
 
View user's profile Send private message ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4584


Location: Москва

PostPosted: 14.10.2010 14:03     Quote

Дотошный Рыжик
Спасибо, будем пытать! Smile
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
View user's profile Send private message E-mail ^

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

Член клуба The eBook



Joined: 28 Aug 2010
Posts: 2845


Location: Samara

PostPosted: 14.10.2010 14:22     Quote

Спасибо, в хозяйстве пригодится...
Люблю консольные полезняшкиSmile
_________________
А бесконечно-самоедские расовые фашисты и их вахтёрские фюрерюгенд-прихвостни могут идти на йух.
 
View user's profile Send private message ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4584


Location: Москва

PostPosted: 14.10.2010 15:04     Quote

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

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 14.10.2010 15:25     Quote

kaznelson
Ё-пс!.. Это не я - это libxml2! Кинь fb2'шку (или скажи, где лежит) - поиграюсь.
 
View user's profile Send private message ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4584


Location: Москва

PostPosted: 14.10.2010 15:27     Quote

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

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

С распаковкой-паковкой, кстати, всё в порядке.
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
View user's profile Send private message E-mail ^

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 14.10.2010 15:51     Quote

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

Posted after 3 minutes 15 seconds:

Дотошный Рыжик wrote:
явно указанный неразрывный пробел
А-аа, понял: надо было оставить "&#160", чтобы сохранялась "тестовость" файла?
 
View user's profile Send private message ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4584


Location: Москва

PostPosted: 14.10.2010 16:06     Quote

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



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

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 14.10.2010 16:44     Quote

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

Posted after 3 hours 48 minutes 51 seconds:

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

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4584


Location: Москва

PostPosted: 15.10.2010 13:16     Quote

Дотошный Рыжик
Боюсь сморозить глупость, но микрософтовский 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
 
View user's profile Send private message E-mail ^

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

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



Joined: 21 Jul 2010
Posts: 98


Location: Saint Petersburg/Moscow

PostPosted: 15.10.2010 14:55     Quote

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

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

Член клуба The eBook



Joined: 16 Sep 2004
Posts: 1703



PostPosted: 15.10.2010 19:03     Quote

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

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 17.10.2010 01:02     Quote

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

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

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

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 18.10.2010 13:37     Quote

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

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4584


Location: Москва

PostPosted: 18.10.2010 16:54     Quote

Дотошный Рыжик
А новое программко?... Smile
_________________
Kobo Aura H2O, Kobo Glo HD, Kindle Paperwhite 2
 
View user's profile Send private message E-mail ^

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 19.10.2010 01:07     Quote

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

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4584


Location: Москва

PostPosted: 19.10.2010 09:58     Quote

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

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

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

PostPosted: 19.10.2010 22:09     Quote

Опять обновил - нашёл граблю, пришлось срочно править.
kaznelson wrote:
невозможность limpng.exe перезаписывать файлы или складывать их в другую папку с оригинальным именем
Делаю. Я его несколько запустил и давно не доводил до пригодного к выкладыванию вида - теперь надо сразу много переделывать. Sad
 
View user's profile Send private message ^

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

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



Joined: 21 Jul 2010
Posts: 98


Location: Saint Petersburg/Moscow

PostPosted: 21.10.2010 10:49     Quote

Дотошный Рыжик
Наконец дошли руки глянуть, что и как... Спасибо большое - результат отличный!
Единственное пожелание объединить разрозненные exe-шники (темы на счет прозрачных картинок) в один, чтобы уже не задумываться (снова пришлось малость помучиться, т.к. если не знаешь о другом форуме (теме) где эти проги представлены - limpng и optipng, то результата не будет Wink
P.S. Не очень понял зачем optipng - по размеру файлы одинаковы, картинка тоже не увеличивается
 
View user's profile Send private message ^
Display posts from previous:   
Post new topic   Reply to topic    The-eBook Forum Index -> Программное обеспечение All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

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