any2jpg
Описание
any2jpg - утилита командной строки для Windows, которая превращает первую страницу документа в JPEG-миниатюру. На вход принимается либо сам файл документа, либо архив (ZIP/TAR), содержащий документ; формат определяется автоматически, страница 1 рендерится с шириной 400 px по умолчанию (настраивается через -w, качество JPEG 85), а результат сохраняется в файл.jpg.
Проект собирает один самодостаточный исполняемый файл (any2jpg.exe) со статически связанными зависимостями - без DLL, без рантайма, без установки. Утилита задумана как лёгкий генератор обложек: по любому распространённому формату документа (или архиву с неизвестным содержимым) она быстро производит небольшой JPEG-превью первой страницы. Типичные сценарии: генерация обложек/миниатюр для каталогов и библиотек документов, превью документов, хранящихся в архивах, построение графических индексов смешанных коллекций документов.
Программа представляет собой один C-файл (main.c), который управляет двумя движками рендеринга: MuPDF - для PDF, EPUB, MOBI, FB2, DOCX, XLSX, PPTX, HTML и TXT; DjVuLibre - для DjVu. Оба движка рендерят страницу в RGB-буфер в памяти, который затем кодируется в JPEG встроенным JPEG-кодером MuPDF.
Используемые модули
- MuPDF 1.28 (mupdf/) - базовый движок рендеринга документов. Разбирает и рендерит PDF, EPUB, MOBI, FB2, DOCX, XLSX, PPTX, HTML и TXT, предоставляет архивный (ZIP/TAR) читатель, используемый для входных файлов, и JPEG-кодер, используемый для вывода. Собирается через mingw32-make в конфигурации release-tofu: html=yes (поддержка HTML/EPUB, подтягивает HTML5-парсер Gumbo), tofu=yes (встроенный набор шрифтов компилируется в библиотеку в виде двоичных блоков), mujs/xps/svg/extract/threading=no (ненужные возможности отключены), ICC-управление цветом и переносы слов отключены, SSE-интринсики отключены для максимальной переносимости. Сборка производит две статические библиотеки: libmupdf.a (движок) и libmupdf-third.a (встроенный third-party код: FreeType, HarfBuzz, zlib, OpenJPEG, jbig2dec, lcms2, Gumbo, libjpeg, brotli и др.)
- DjVuLibre 3.5.29 (djvulibre/) - библиотека декодирования DjVu. Компилируется в статическую библиотеку из исходников libdjvu с включённым JPEG-декодером (NEED_JPEG_DECODER), поскольку фоновый слой страниц DjVu часто хранится в формате JPEG. Программа использует её асинхронный C API (ddjvuapi): документ подаётся в декодер, цикл обработки сообщений обрабатывает события декодера, а первая страница рендерится в RGB24-буфер
- libjpeg 9a (libjpeg/) - кодек Independent JPEG Group, собранный в статическую библиотеку из основного подмножества исходников декодера/кодера. Поставляет JPEG-символы, нужные DjVuLibre на этапе компиляции (в итоговом исполняемом файле они разрешаются из копии, встроенной в libmupdf-third.a)
- libwebp (libwebp/) - готовые статические библиотеки libwebp.a и libsharpyuv.a (WebP-кодек Google). Обеспечивают декодирование изображений WebP внутри MuPDF, чтобы документы с встроенными WebP-изображениями рендерились корректно
- zlib 1.2.8 (zlib/) - стандартная библиотека сжатия, используемая DjVuLibre для zlib-сжатых потоков DjVu (MuPDF использует собственную встроенную копию zlib)
Технологии
- Языки: C (основная программа), C++ (DjVuLibre)
- Инструментарий: MinGW-w64 (gcc/g++ 15.2, GNU ar, mingw32-make 4.4)
- Система сборки: единый батник (build_any2jpg.bat), который управляет собственным Makefile MuPDF и прямой компиляцией остальных библиотек
- bash (из Git for Windows) используется Makefile MuPDF для рецептов генерации ресурсов
- PowerShell используется билдером только для быстрого сравнения дат файлов (проверки инкрементальной сборки)
- Платформа: Windows x64