Linux 编译 libjpeg-9e

 

jpeg的库有两个:一个是官方的 libjpeg  还有一个是 libjpeg-turbo

JPEG库(libjpeg-turbo):https://libjpeg-turbo.org/
Libjpeg库:http://www.ijg.org/
 
*:我用的是官方的 libjpeg,进入官网下载的时候,要注意zip的这个包是Windows的,tar.gz的这个包才是linux的
 
./configure -h   # 查看编译参数
--enable-shared # 编译动态库 --enable-static # 编译静态库 --with-pic # fPIC --prefix # 生成的文件安装位置 # jpeg 编译,带fPIC,默认会编译出静态库+动态库 ./configure --with-pic --prefix=pwd/bin make && make install

 

 
其他笔记:
对这个不熟悉,网上不好找文档,找了一圈也是找不到,后来才知道在压缩包里面带的有文档【libjpeg.txt】和示例demo【example.c】

 

#include <stdio.h>
#include "jpeglib.h"

/*************************************** jpeg 压缩大概流程 ************************************/
// 1.分配和初始化jpeg压缩对象
struct jpeg_compree_struct cinfo;
struct jpeg_error_mgr jerr;

cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);

// 2.指定数据目标
FILE *fp = fopen(file_name, "wb");
jpeg_stdio_dest(&cinfo, fp);

// 3.设置压缩参数
cinfo.image_width = 1920;
cinfo.image_height = 1080;
cinfo.input_components = 3;     // 通道数,3彩色,1灰色
cinfo.in_color_space = JCS_RGB; // 输入图像的色彩空间
cinfo.arith_code = FALSE;       // 编码方式,TRUE:算术编码;FALSE:霍夫曼编码
jpeg_set_defaultes(&cinfo);
jpeg_set_quality(&cinfo, 80, TRUE); // 设置压缩质量

// 4.开始压缩
jpeg_start_compress(&cinfo, TRUE);
JSAMPROW row_pointer[1];
int row_stride = cinfo.image_width * 3;
while(cinfo.next_scanline < cinfo.image_height)
{
    row_pointer[0] = &image_buffer[cinfo.next_scanline * row_stride];
    jpeg_write_scanlines(&cinfo, row_pointer, 1);
}

// 5.完成
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);


/*************************************** jpeg 解压缩大概流程 **********************************/
// 1.分配和初始化jpeg解压缩对象
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;

cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);

// 2.数据源
FILE *fp = fopen(file_name, "rb");
jpeg_stdio_src(&cinfo, fp);

// 3.获取图片信息
jpeg_read_header(&cinfo, TRUE);

// 4.设置解压缩参数
cinfo.scale_num = 1;
cinfo.scale_denom = 8;  // 设置压缩1/8,取值1、2、4、8

// 5.开始压缩
jpeg_start_decompress(&cinfo);
int row_stride = cinfo.output_width * cinfo.output_components;
JSAMPARRAY buffer;
buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo, JPOOL_IMAGE, row_stride, 1);
while(cinfo.output_scanline < cinfo.output_height)
{
    jpeg_read_scanlines(&cinfo, buffer, 1);
}

// 6.完成
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);

 

posted @ 2023-08-01 14:11  十一的杂文录  阅读(182)  评论(0编辑  收藏  举报