一个用 C++17 编写的 JPEG 图像元数据解析和显示工具。
该工具可以解析和显示 JPEG 文件中的各种元数据信息:
- JFIF 信息 (APP0): 版本、密度单位、分辨率、缩略图尺寸
- SOF 信息 (Start of Frame): 图像尺寸、精度、颜色分量
- EXIF 信息 (APP1): 相机设置、拍摄参数、GPS 位置等
- XMP 信息 (APP1): Adobe XMP 元数据
- ICC Profile (APP2): 颜色配置文件
- Adobe 信息 (APP14): Adobe 特定的颜色转换信息
- COM 注释: JPEG 注释段
jpeg-info/
├── CMakeLists.txt # CMake 构建配置
└── src/
├── main.cpp # 主程序入口
├── format.h/cpp # 格式化输出函数
├── i18n.h/cpp # 国际化支持 (中文/英文)
├── file_reader.h/cpp # 文件读取工具
├── jpeg_indexer.h/cpp # JPEG 段索引构建
├── jpeg_markers.h # JPEG 标记定义
├── jpeg_types.h # 数据结构定义
├── parse_jfif.h/cpp # JFIF 解析
├── parse_sof.h/cpp # SOF 解析
├── parse_exif.h/cpp # EXIF 解析
├── parse_xmp.h/cpp # XMP 解析
├── parse_icc.h/cpp # ICC Profile 解析
├── parse_adobe.h/cpp # Adobe APP14 解析
└── parse_com.h/cpp # COM 注释解析
需要 C++17 编译器和 CMake 3.16+。
mkdir build
cd build
cmake ..
make编译成功后会在 build 目录生成 jpeg_info 可执行文件。
如果您想直接从 GitHub 安装,可以使用以下一行命令:
git clone https://github.com/unknownparticles/jpeg-info.git && cd jpeg-info && mkdir -p build && cd build && cmake .. && make && sudo make install您可以将 jpeg_info 安装到系统目录,以便在任何地方使用。
cd build
sudo make install默认情况下,程序会安装到 /usr/local/bin/jpeg_info。
在编译完成后,您可以手动将 jpeg_info.exe 所在的目录添加到系统环境变量 PATH 中。
安装完成后,您可以直接在终端运行 jpeg_info:
# 使用中文显示 (默认)
jpeg_info image.jpg
# 使用英文显示
jpeg_info image.jpg --lang=en
# 只显示 EXIF 信息
jpeg_info image.jpg --exif
# 只显示 XMP 信息
jpeg_info image.jpg --xmp
# 组合显示 EXIF 和 XMP
jpeg_info image.jpg --exif --xmp
# 只显示分区列表
jpeg_info image.jpg --segments可用的选择性输出选项:
--segments: 只显示分区列表--jfif: 只显示 JFIF 信息--sof: 只显示图像基本信息--exif: 只显示 EXIF 信息--xmp: 只显示 XMP 信息--icc: 只显示 ICC Profile 信息--adobe: 只显示 Adobe APP14 信息--com: 只显示注释信息
如果未安装,也可以在 build 目录下运行:
./build/jpeg_info image.jpg程序会输出以下信息:
- 分区列表: 显示 JPEG 文件中所有的段 (segments),包括标记类型、偏移量、长度等
- JFIF 信息: 如果存在 JFIF APP0 段
- 图像基本信息: 从 SOF 段提取的图像尺寸和颜色信息
- EXIF 信息: 相机和拍摄参数
- GPS 信息: 如果 EXIF 中包含地理位置
- XMP 元数据: Adobe XMP XML 数据
- ICC Profile: 颜色配置文件信息
- Adobe 信息: 颜色转换标志
- 注释: COM 段中的文本注释
- 段索引: 快速扫描 JPEG 文件,构建所有段的索引
- APP 子类型识别: 自动识别 APP0-APP15 段的具体类型 (JFIF/EXIF/XMP/ICC 等)
- SOS 数据跳过: 正确处理 Start of Scan 后的压缩图像数据 (包括 0xFF00 stuffing)
- ICC Profile 拼接: 支持多段 ICC Profile 的自动拼接
- EXIF 解析: 支持 Big/Little Endian,解析 IFD0/EXIF/GPS 子 IFD
- 国际化: 支持中英文界面
- 模块化设计: 每种元数据类型都有独立的解析模块
- 零拷贝索引: 先构建索引,按需加载段数据
- 跨平台: 支持 Windows (MSVC) 和 Unix-like 系统 (macOS/Linux)
- 类型安全: 使用 C++17 的
std::optional处理可选数据