(2) 指定压缩数据保存的位置

Libjpeg库把压缩后的数据传输到“数据目的”模块。在本库中包含把数据写入到标准流的“数据目的”模块。如果想把数据写入到其他地方(比如内存),可以自定义“数据目的”模块。以下是示例代码:

FILE * outfile;

...

if ((outfile = fopen(filename, "wb")) == NULL) {

writeLog(…);

}

jpeg_stdio_dest(&cinfo, outfile);

最后一个函数调用了标准“数据目的”模块。

可以选择在设置参数(步骤3)后再数据目的,但不能在jpeg_start_compress()和jpeg_finish_compress()之间更改数据目的。

(3) 设置压缩对象的参数

我们必须在JPEG压缩对象中设置源图片的以下信息:

image_width            图片的宽度,以像素为单位

image_height            图片的高度,以像素为单位

input_components    色彩通道数(每像素采样)

in_color_space    源文件的色彩空间

input_components为1代表灰度图,在等于3时代表彩色位图图像

in_color_space为JCS_GRAYSCALE表示灰度图,在等于JCS_RGB时代表彩色位图图像

JPEG需要提供大量的参数来决定我们如何对参数进行编码。大多数情况下我们不需要知道所有的参数,我们可以使用jpeg_set_defaults()把参数设置成合理的默认值。然后,再设置我们需要更改的参数。

jpeg_set_defaults()依赖于源图像的色彩空间,我们需要在调用jpeg_set_defaults()之前正确设置in_color_space。以下是设置压缩对象的参数的参考代码:

cinfo.image_width = Width;

cinfo.image_height = Height;

cinfo.input_components = 3;

cinfo.in_color_space = JCS_RGB;

jpeg_set_defaults(&cinfo);

//设置压缩参  数

(4)jpeg_start_compress(...)

在设置完数据目的和源图像的所有信息和参数后,我们就可以通过调用jpeg_start_compress()来启动一个压缩循环。jpeg_start_compress()会初始化内部的状态,分配工作空间。并且产生JPEG文件头的数据流。示例代码:

jpeg_start_compress(&cinfo, TRUE);

在这里”TRUE”代表我们需要写入一个完整的数据流

(5) 逐行压缩图像

现在我们可以通过调用jpeg_write_scanlines()写入图象数据了。图象数据应该按照自底向上的顺序进行扫描。

(6jpeg_finish_compress

当所有的图像数据都被写入后,我们调用jpeg_finish_compress来结束压缩循环。这是为了确保所有的数据都被写入数据目的。jpeg_finish_compress同时也承担着释放JPEG对象开辟的内存的工作。一般代码如下:

jpeg_finish_compress(&cinfo);

(7 释放JPEG压缩对象

当对一个JPEG对象完成压缩后,调用jpeg_destroy_compress来释放内存。

libjpeg用法linux压缩,使用libjpeg对图像进行压缩相关推荐

  1. libjpeg用法linux压缩,libjpeg学习1:简单使用示例

    #include #include #include #include #include #include #include // jpeg库头文件必须放到stdio.h后面 #include &qu ...

  2. libjpeg用法linux压缩,安装libjpeg库

    1.建立相关路径以下这几个文件节点最好建全,不然会出错.这是因为在自动生成的Makefile中已经设置好了这几个路径,make的时候会在这几个路径下装入相应的内容请查看经过./configure后生成 ...

  3. Android仿微信高效压缩图片(libjpeg)

    用过ios手机的同学应该很明显感觉到,ios拍照1M的图片要比安卓拍照排出来的5M的图片还要清晰.这是为什么呢? 这得了解android底层是如何对图片进行处理的. 当时谷歌开发Android的时候, ...

  4. LibJpeg的安装与修复颜色错误图像错位保姆级教程

    0. 直接跳到第4部分(安装),请直接前往卸载已编译好的库 已编译并修复的jpeglib库-C++文档类资源-CSDN文库 1. 下载 官方下载链接 jpeg-9c版下载链接 (本文版本) 本文使用j ...

  5. linux命令操作改变图片大小,如何在Linux命令行中优化和压缩JPEG或PNG图像

    原标题:如何在Linux命令行中优化和压缩JPEG或PNG图像 来自:Linux迷https://www.linuxmi.com/linux-yasuo-jpeg-png.html 您有很多图像,并且 ...

  6. linux 上plsql命令_在 Linux 上压缩文件:zip 命令的各种变体及用法 | Linux 中国

    除了压缩和解压缩文件外,你还可以使用 zip 命令执行许多有趣的操作.这是一些其他的 zip 选项以及它们如何提供帮助.-- Sandra Henry-stocker 为了节省一些磁盘空间并将文件打包 ...

  7. Linux系统(一)文件系统、压缩、打包操作总结

    序言 当前的形势,.Net已经开源,.Net Core 正在跨平台,可见微软巨人在努力,在改变,在进步,在走向春天.从前被微软供作上帝的.Net从业者,如果不打开心扉面向开源,改变自己,那么很可能在不 ...

  8. linux所有文件打包压缩,Linux基础教程:对文件打包压缩

    一.须知 文件数量太多, 如果需要拷来拷去是不是很麻烦?    怎么办?  打包! 文件太大,通过网络下载.传输会不会很费时间?    怎么办?  压缩! 在Linux环境中,打包压缩文件的扩展名多是 ...

  9. PHP 图像编辑GD库的使用以及图像的压缩

    1.php在使用GD库的时候应打开对应的GD库扩展,如下图 2.GD库的开头小案例 imagecreatetruecolor(width, height) 创建一个幕布 imagecoloralloc ...

最新文章

  1. 神秘粒子可让硬盘体积缩至花生米大小
  2. WP7开发—Silverlight多点触摸事件详解【含Demo代码】
  3. javadrawstring设置字符大小_LaTex学术写作——编辑文档格式 设置论文标题与摘要...
  4. VS2010中C#添加图片(资源)
  5. 线程打印状态_Java线程状态的转换
  6. ROS坐标系统,常见的坐标系和其含义
  7. 中国第一程序员--求伯君
  8. html留言功能怎么实现,javascript实现留言板功能
  9. 手机变为电脑的摄像头,使像素高清起来-使用DroidCam
  10. AUTOCAD圆角半径过大问题的思考和计算
  11. docker设置系统开机自动启动,docker容器随着docker服务启动自动运行
  12. 点滴故事-写在我个人网站的0岁生日
  13. 个人计算机是国产芯片,全球最纯国产PC诞生!所有芯片/系统都是国产
  14. windows 自带计算器介绍
  15. elastic job (一) elastic-job-lite----SimpleJob
  16. 微服务项目构建标准文档
  17. python藏头诗生成器_GitHub - chenjiahui/Chinese_poem_generator: 唐诗、宋词生成器,有详细说明...
  18. unity 用四元素实现摄像机的跟随鼠标旋转,缩放
  19. 找工作的时候怎么确认公司是否靠谱?
  20. apollo学习之---planning理论到实践(5-3)---路径边界计算

热门文章

  1. 点对点通讯的好处和坏处?能否实现及时通讯?
  2. QQ聊天记录在哪个文件夹里 - 针对QQ2009,QQ2010,QQ2011,QQ2012
  3. PTES标准的渗透测试七个阶段
  4. win10家庭版调出组策略_两种方法教你彻底关闭win10自带杀毒软件——Windows Defender...
  5. 2022电工(初级)考试练习题及模拟考试
  6. Kali之MSF的MS08-067漏洞复现详解
  7. 在微软Win10系统下安装SQL Server 2005时提示无法启动服务
  8. 【C语言】实现字符串逆序输出(包含空格的字符串)
  9. 抓取京东的某个商品价格
  10. 测试服mysql突然崩溃