1.实现原理
实现完整的图片无损压缩和解压缩需要使用一些图像处理库,例如OpenCV,libjpeg,libpng,等等。这里我们以libjpeg为例进行介绍。
2.压缩函数
压缩:首先需要读取图片,将其转换成JPEG格式,然后进行压缩。
#include <stdio.h>
#include <jpeglib.h>void compress(const char* img_path, const char* compressed_path) {// 1. 打开输入文件FILE *infile = fopen(img_path, "rb");struct jpeg_decompress_struct srcinfo;struct jpeg_error_mgr srcerr;// 2. 用jpeg_std_error初始化结构体srcerrsrcinfo.err = jpeg_std_error(&srcerr);// 3. 调用jpeg_create_decompress函数,初始化结构体srcinfojpeg_create_decompress(&srcinfo);// 4. 将输入文件关联到srcinfojpeg_stdio_src(&srcinfo, infile);// 5. 调用jpeg_read_header函数,获取图像信息jpeg_read_header(&srcinfo, TRUE);// 6. 调用jpeg_start_decompress函数,启动解压缩jpeg_start_decompress(&srcinfo);// 7. 分配内存存储原始像素数据int row_stride