项目简介
本项目是轻量级的JPEG图像编解码解决方案,由 jpge.cpp 实现JPEG图像压缩功能,jpgd.cpp 实现JPEG图像解压缩功能。代码量约1000行,使用简单,可选择公共领域或Apache 2.0许可证。该项目支持多种色度子采样因子、Libjpeg兼容的质量设置,内存消耗低且速度合理。此外,还提供了示例命令行工具和VS2019解决方案,支持CMake编译。
项目的主要特性和功能
压缩功能
- 支持灰度和H1V1/H2V1/H2V2色度子采样因子。
- 支持Libjpeg兼容的质量设置。
- 支持单遍和两遍霍夫曼编码。
- 仅进行一次动态内存分配。
- 接受32位源图像。
解压缩功能
- 支持渐进式图像解压缩。
- 支持盒式和线性色度上采样。
- 支持灰度或H1V1/H2V1/H1V2/H2V2色度上采样因子。
- 经模糊测试,对意外或故意损坏的输入有弹性。
- 无需将整个图像加载到内存,一次仅处理单个MCU行。
其他特性
- 提供命令行工具 jpge.exe,支持多种格式图像转基线JPEG。
- 支持用SSE2加速,可通过宏控制。
安装使用步骤
安装
假设用户已下载本项目源码文件。若使用VS2019,可直接打开项目中的VS2019解决方案编译;若使用gcc/clang,可使用项目中的 CMakeLists.txt 文件编译。
使用
压缩
- 包含头文件 jpge.h。
- 调用 jpge命名空间中的辅助函数,如:cpp // 写入JPEG图像到文件 bool compress_image_to_jpeg_file(const char *pFilename, int width, int height, int num_channels, const uint8 *pImage_data, const params &comp_params = params()); // 写入JPEG图像到内存缓冲区 bool compress_image_to_jpeg_file_in_memory(void *pBuf, int &buf_size, int width, int height, int num_channels, const uint8 *pImage_data, const params &comp_params = params());也可直接调用jpge::jpeg_encoder类获更多控制权。
解压缩
- 包含头文件 jpgd.h。
- 调用 jpgd命名空间中的辅助函数,如:cpp // 从内存缓冲区加载JPEG图像 unsigned char *decompress_jpeg_image_from_memory(const unsigned char *pSrc_data, int src_data_size, int *width, int *height, int *actual_comps, int req_comps, uint32_t flags = 0); // 从文件加载JPEG图像 unsigned char *decompress_jpeg_image_from_file(const char *pSrc_filename, int *width, int *height, int *actual_comps, int req_comps, uint32_t flags = 0);同样,可直接使用jpgd::jpeg_decompressor类或调用decompress_jpeg_image_from_stream()函数获更多控制权。
测试
使用命令行工具 jpge.exe 测试,用法如下:
bin/jpge source_file.png destination_file.jpg quality_factor
其中 quality_factor 范围为1 - 100,值越高质量越好。此外,jpge.exe 还支持其他测试模式,可通过 -x 选项进行详尽测试,通过 -d 选项进行JPEG到TGA的解压缩。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】