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 缓冲,再由 MuPDF 内置 JPEG 编码器编码为 JPEG。
使用的模块
- MuPDF 1.28(mupdf/)- 基础文档渲染引擎。解析并渲染 PDF、EPUB、MOBI、FB2、DOCX、XLSX、PPTX、HTML 与 TXT,提供用于输入文件的压缩包(ZIP/TAR)读取器与用于输出的 JPEG 编码器。经 mingw32-make 以 release-tofu 配置构建:html=yes(HTML/EPUB 支持,引入 Gumbo HTML5 解析器)、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 编解码器,从编解码器核心源码子集构建为静态库。提供 DjVuLibre 编译期所需的 JPEG 符号(在最终可执行文件中解析自 libmupdf-third.a 内置副本)
- libwebp(libwebp/)- 预构建静态库 libwebp.a 与 libsharpyuv.a(Google WebP 编解码器)。提供 MuPDF 内的 WebP 图像解码,使含内嵌 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),驱动 MuPDF 自有 Makefile 及其他库的直接编译
- MuPDF 的 Makefile 使用 bash(来自 Git for Windows)执行资源生成配方
- 构建器仅用 PowerShell 快速比较文件日期(增量构建检查)
- 平台:Windows x64