项目简介
本项目是轻量级的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】