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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-08-01 Qt操作ini文件