libjpeg用法linux压缩,使用libjpeg对图像进行压缩
(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对图像进行压缩相关推荐
- libjpeg用法linux压缩,libjpeg学习1:简单使用示例
#include #include #include #include #include #include #include // jpeg库头文件必须放到stdio.h后面 #include &qu ...
- libjpeg用法linux压缩,安装libjpeg库
1.建立相关路径以下这几个文件节点最好建全,不然会出错.这是因为在自动生成的Makefile中已经设置好了这几个路径,make的时候会在这几个路径下装入相应的内容请查看经过./configure后生成 ...
- Android仿微信高效压缩图片(libjpeg)
用过ios手机的同学应该很明显感觉到,ios拍照1M的图片要比安卓拍照排出来的5M的图片还要清晰.这是为什么呢? 这得了解android底层是如何对图片进行处理的. 当时谷歌开发Android的时候, ...
- LibJpeg的安装与修复颜色错误图像错位保姆级教程
0. 直接跳到第4部分(安装),请直接前往卸载已编译好的库 已编译并修复的jpeglib库-C++文档类资源-CSDN文库 1. 下载 官方下载链接 jpeg-9c版下载链接 (本文版本) 本文使用j ...
- linux命令操作改变图片大小,如何在Linux命令行中优化和压缩JPEG或PNG图像
原标题:如何在Linux命令行中优化和压缩JPEG或PNG图像 来自:Linux迷https://www.linuxmi.com/linux-yasuo-jpeg-png.html 您有很多图像,并且 ...
- linux 上plsql命令_在 Linux 上压缩文件:zip 命令的各种变体及用法 | Linux 中国
除了压缩和解压缩文件外,你还可以使用 zip 命令执行许多有趣的操作.这是一些其他的 zip 选项以及它们如何提供帮助.-- Sandra Henry-stocker 为了节省一些磁盘空间并将文件打包 ...
- Linux系统(一)文件系统、压缩、打包操作总结
序言 当前的形势,.Net已经开源,.Net Core 正在跨平台,可见微软巨人在努力,在改变,在进步,在走向春天.从前被微软供作上帝的.Net从业者,如果不打开心扉面向开源,改变自己,那么很可能在不 ...
- linux所有文件打包压缩,Linux基础教程:对文件打包压缩
一.须知 文件数量太多, 如果需要拷来拷去是不是很麻烦? 怎么办? 打包! 文件太大,通过网络下载.传输会不会很费时间? 怎么办? 压缩! 在Linux环境中,打包压缩文件的扩展名多是 ...
- PHP 图像编辑GD库的使用以及图像的压缩
1.php在使用GD库的时候应打开对应的GD库扩展,如下图 2.GD库的开头小案例 imagecreatetruecolor(width, height) 创建一个幕布 imagecoloralloc ...
最新文章
- 神秘粒子可让硬盘体积缩至花生米大小
- WP7开发—Silverlight多点触摸事件详解【含Demo代码】
- javadrawstring设置字符大小_LaTex学术写作——编辑文档格式 设置论文标题与摘要...
- VS2010中C#添加图片(资源)
- 线程打印状态_Java线程状态的转换
- ROS坐标系统,常见的坐标系和其含义
- 中国第一程序员--求伯君
- html留言功能怎么实现,javascript实现留言板功能
- 手机变为电脑的摄像头,使像素高清起来-使用DroidCam
- AUTOCAD圆角半径过大问题的思考和计算
- docker设置系统开机自动启动,docker容器随着docker服务启动自动运行
- 点滴故事-写在我个人网站的0岁生日
- 个人计算机是国产芯片,全球最纯国产PC诞生!所有芯片/系统都是国产
- windows 自带计算器介绍
- elastic job (一) elastic-job-lite----SimpleJob
- 微服务项目构建标准文档
- python藏头诗生成器_GitHub - chenjiahui/Chinese_poem_generator: 唐诗、宋词生成器,有详细说明...
- unity 用四元素实现摄像机的跟随鼠标旋转,缩放
- 找工作的时候怎么确认公司是否靠谱?
- apollo学习之---planning理论到实践(5-3)---路径边界计算
热门文章
- 点对点通讯的好处和坏处?能否实现及时通讯?
- QQ聊天记录在哪个文件夹里 - 针对QQ2009,QQ2010,QQ2011,QQ2012
- PTES标准的渗透测试七个阶段
- win10家庭版调出组策略_两种方法教你彻底关闭win10自带杀毒软件——Windows Defender...
- 2022电工(初级)考试练习题及模拟考试
- Kali之MSF的MS08-067漏洞复现详解
- 在微软Win10系统下安装SQL Server 2005时提示无法启动服务
- 【C语言】实现字符串逆序输出(包含空格的字符串)
- 抓取京东的某个商品价格
- 测试服mysql突然崩溃