Linux 编译 libjpeg-9e
jpeg的库有两个:一个是官方的 libjpeg 还有一个是 libjpeg-turbo
./configure -h # 查看编译参数
--enable-shared # 编译动态库
--enable-static # 编译静态库
--with-pic # fPIC
--prefix # 生成的文件安装位置 # jpeg 编译,带fPIC,默认会编译出静态库+动态库
./configure --with-pic --prefix=pwd/bin
make && make install
#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);
Linux 编译 libjpeg-9e的更多相关文章
- Linux(CentOS6.5_X86.64)编译libjpeg出现“checking host system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized”的解决
本文地址http://comexchan.cnblogs.com/,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢! 今天在编译libjpeg 的时候,遇到下面的报错: checki ...
- Linux编译安装Apache+PHP
Linux编译安装Apache+PHP 来自:自学it网,http://www.zixue.it/. 1]编译安装Apache+PHP 1.安装程序依赖库和开发环境 为了省事把所需要的库文件全都安 ...
- 【转】linux 编译安装nginx,配置自启动脚本
linux 编译安装nginx,配置自启动脚本 本文章来给各位同学介绍一篇关于linux 编译安装nginx,配置自启动脚本教程,希望有需要了解的朋友可一起来学习学习哦. 在公司的suse服务器装ng ...
- linux编译中的常见问题
转linux编译中的常见问题 错误提示:Makefile:2: *** 遗漏分隔符 . 停止. 原因makefile中 gcc语句前 缺少一个 tab分割符 错误提示: bash: ./makefil ...
- linux 编译安装nginx,配置自启动脚本
本文章来给各位同学介绍一篇关于linux 编译安装nginx,配置自启动脚本教程,希望有需要了解的朋友可一起来学习学习哦. 在公司的suse服务器装nginx,记录下安装过程: 参照这篇文章:Linu ...
- 【原创】Linux编译内核
Linux 编译内核 大致分这几个步骤 1.准备编译工具.内核文件 2.开始编译 3.将编译好的新内核install进系统 4.查看是否成功. 一.准备好必备的库和内核文件 1.添加必备的编译 ...
- 【转】VS2013编译libjpeg库
原文地址:http://blog.csdn.net/weixinhum/article/details/42718959 现在,很多图像处理工具和开源库都给出了图像解码的函数接口,然而有时这些接口并不 ...
- Linux编译Windows共享目录下代码
Linux编译Windows共享目录下代码(金庆的专栏)万神服务器代码是跨平台的.平时策划在Windows上开自己的服务器测试,测试和发布服务器为Linux.开发时,先在Windows上编译测试,再到 ...
- linux 编译安装PHP模块
本文移到:http://www.phpgay.com/Article/detail/classid/6/id/54.html linux 编译安装PHP模块 1.首先你要有你服务器上安装的PHP的版 ...
- [CentOS_7.4]Linux编译安装ffmpeg
[CentOS_7.4]Linux编译安装ffmpeg 安装过程: 下载安装源,配置,编译,安装,设置环境变量. # wget http://www.ffmpeg.org/releases/ffm ...
随机推荐
- C#多线程(9):多阶段并行线程
目录 前言 Barrier 类 属性和方法 示例 新的示例 说明 前言 这一篇,我们将学习用于实现并行任务.使得多个线程有序同步完成多个阶段的任务. 应用场景主要是控制 N 个线程(可随时增加或减少执 ...
- 关于KMP模式匹配的一些思考
算法简介 模式匹配 给定主串text和模式串pattern,在主串中查找,如果找到了模式串,返回模式串在主串中的起始位置,从1开始计数. 暴力求解求解模式匹配 算法的核心思想是:蛮力法.即使用两个指针 ...
- 多线程系列(十一) -浅析并发读写锁StampedLock
一.摘要 在上一篇文章中,我们讲到了使用ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题. 如果继续深入的分析ReadWriteLock,从锁的角度分析,会发现它有一个潜在的问 ...
- rpa:小红书为例讲解界面选取和界面库选取两种元素选择方式的区别执行js获取数据
上文有讲到rpa从安装到第一个小例子的运行,这篇文章我们讲解rpa的两种元素选择方式说明:界面选取和界面库选取. 首先,我们需要知道为什么需要选取元素,以及选取了元素之后有什么作用? 现在有一种这样的 ...
- 15. JVM垃圾回收器详解
1. 垃圾回收器的分类 和 GC性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现. 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC ...
- golang开发:环境篇(三)开发利器Goland安装
这节主要介绍下golang开发的最主要的IDE,Goland.可以有效提高开发效率.用过一段时间 IntelliJ+GO插件,其实功能上跟goland差不多.不过团队的其它开发者基本都是Goland, ...
- audio currentTime 设置后,重置成0,解决方案(流文件-下载文件)
audio currentTime 设置后,重置成0,解决方案 第一步-流文件-下载文件: 先查看你的mp3文件是 流文件,还是下载文件. 检测方式,就是放到浏览器回车.在线播放就是流文件,直接下载了 ...
- k8s是如何保障滚动升级时下线的pod不被访问
Kubernetes (k8s) 通过一系列机制保障在滚动升级时,下线的 Pod 不再被访问.以下是一些主要的保障措施: Service 抽象:在 Kubernetes 中,Pod 通常不是直接暴露给 ...
- stm32 文件系统数据读写源码解析
一 概念 fatfs文件系统在文件读写中不可或却.熟悉和深入理解是一个不可或缺的前提. 这里面需要先明确几个概念:文件open的属性,这个非常重要.可以并列使用. 二 源码解析 A 写入数据: i ...
- kettle入门教程-表同步插入
在平时工作当中,会遇到这种情况,而且很常见.比如:增量抽取(每隔2个小时抽取截至到上次抽取时间的记录)一.操作前提:存在3张表,源表(t_student),同步日志表(t_tbrz),插入表(t_ta ...