导航:首页 > 文件处理 > libjpeg压缩jpg

libjpeg压缩jpg

发布时间:2022-05-28 00:04:37

① 写数据到JPG使用libexif问题,怎么解决

libjpeg中的jpeg_read_header函数用于读取jpeg数据头部的基本信息,以下为jpeg_read_header的定义。
/* Decompression startup: read start of JPEG datastream to see what's there */
EXTERN(int) jpeg_read_header (j_decompress_ptr cinfo, boolean require_image);1212

有时候我们知道图像的基本信息,根据这些信息再决定是不是要解压缩这个图像,这时就可以用这个函数在不对图像解码的情况下获取图像的基本信息。
以下是代码实现
/* (不解压缩)读取jpeg格式的内存数据块的基本信息返回image_matrix_pram对象
* 如果数据为空或读取数据出错抛出 jpeg_mem_exception
*/
image_matrix_pram read_jpeg_header_mem(uint8_t *jpeg_data,size_t size) {
if(nullptr==jpeg_data||0==size)
throw jpeg_mem_exception("empty image data");
// 定义一个压缩对象
jpeg_decompress_struct dinfo;
//用于错误信息

② 用opencv读图,缩略以后用libjpeg压缩图像失真

图片有一列像素错位导致的,可能是图片长宽不是2的n次方或者2的倍数造成的

③ 如何在windows环境下配置libjpeg

使用libjpeg源代码实现读取jpeg格式图片,生成.lib方法如下:

1、下载最新的函数库,解压缩后放到一个目录中例如: c:/temp/jpeglib-8c/

2、生成头文件jconfig.h,新建一个文件命名为jconfig.h,拷贝程序库中jconfig.vc内容到刚建立的文件中。

3、进入命令行模式RUN->CMD,然后执行 nmake -f makefile.vc 生成所需要的libjpeg.lib函数库。
(原创-出错处理)注意:这一步有两个错误出现:
A、makefile.vc<11>:fatal error U1052: file 'win32.mak' not found
提示找不到win32.mak文件,这个文件定义了一些必须的宏,这个文件在Windows SDK的安装目录中,打开makefile.vc文件修改第12行为: !include <C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\win32.mak> 保存,再执行编译命令又有新的错误。
B、 运行,发现这一步可以过得去了,但又有新的错误,此时,我选择先设定运行环境 :搜索“vcvars32.bat”拷贝到jpeglib-8c目录下,运行,然后再运行nmake -f makefile.vc ,此时发现一切问题全部解决

最后生成我们所需要的文件:libjpeg.lib。
4. vs2008注意包含库文件(附件--项目。。。)

④ 请问你对libjpeg库熟悉吗我想验证下 《libjpeg实现内存内位图的压缩及解压缩》,可是还是出错了

其实直接传个FILE *给libjpeg就好了。。。用完之后再把临时文件删掉就是。。。。
内存做的话,还是仔细读读那个库的源码比较好。。

另外 , LINK 2001的错误的话不是修改的问题吧。。。你核实一下用到的.lib/.a有没有连接,,如果是libjpeg连接时的问题的话,,你应该确定下是不是所有有效的.c文件都在。

⑤ 关于JPEG的解码问题

这个bits的划分,其实就是靠霍夫曼码控制的。之所以用霍夫曼编码,是因为这个编码是唯一的,不可能有重复,如果像你所说的那样,随意划分的话,只能导致错误。
霍夫曼编码中,当你从当前的码流中提取若干比特,程序会查询霍夫曼表中是否有对应的编码,如果有,则会检出一个length值,代表这个编码占用多少bit, 若没有查到,程序会逐一增加后续bit继续查表,直到查到为止。经此而已。
建议你仔细研究研究霍夫曼编码相关论文。

⑥ 如何使用libtiff读取使用jpeg压缩过的tiff文件

当你在tiffconf.h中定义 JPEG_SURPPORT或OJPEG_SUPPORT后就需要IJG的libjpeg库,就是你说的"把jpeglib.lib库加入编译tifflib工程"

因为修改了libjpeg库所以需要重新编译libjpeg库

你在libtiff的目录下可以看到上面的说明 contrib\ojpeg\目录下

如果只定义JPEG_SUPPORT就不需要看上面的帮助

⑦ 将摄像头采集的YUV格式的数据,通过libjpeg库转换为jpg格式的图片,出现了失真(图片花屏,很乱有阴影)

摄像头采集的图片,在保证格式转换正确下,如果是4乒乓操作的话,注意开始保存的第一帧是必须丢弃的。且对YUV格式是420或422等数据偏移要保证正确。花屏、阴影就是理解号乒乓操作

⑧ jpeg图片解压缩成bmp图片后质量能变好么

用libjpeg库将jpeg图

⑨ 如何使用libjpeg

本文只介绍jpeg压缩的相关内容,刚开始我贪图省事,采用微 软 的GDI Plus提供的功能,很是方便,先获取jpg图像的编码,然后根据图像的位图数据创建一个Bitmap类的对象,再保存图像为jpg格式就行了。但是我对 GDI+还是很信任,总感觉不踏实(没有理由的),我们的系统一旦安装就要长期运行,我就是担心长期运行一段时间后GDI+会出问题,结果也证实了我的担 心,我们实际使用的10套系统中有一套,连续运行3-5天后,GDI+就会崩溃,于是我决心采用IJG JPEG Library。您可以到
站下载libjpeg的源码, IJG JPEG Library就是jpeg压缩库,是以源码的形式提供给软件开发人员的,当然在软件包里也有编译好的库文件,我们这里就只用到其中的 libjpeg.lib,jconfig.h,jmorecfg.h,jpeglib.h这几个文件,下面我就介绍一下怎样在自己的程序里嵌入图像压缩功 能。
一、建立编译环境
所谓建立编译环境,其实非常简单,就是把上面提到的4个文件拷 贝到你的项目文件夹下,把libjpeg.lib添加到你的项目中,然后在你完成压缩功能的那个文件里加入#include "jpeglib.h",需要注意的是,libjpeg.lib是用c语言开发的,如果要用在你的C++程序里,需要用到extern "C",如下:
// TestLibjpeg.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "memory.h"
extern "C" {
#include "jpeglib.h"
}
二、压缩步骤
1、申请并初始化jpeg压缩对象,同时要指定错误处理器
struct jpeg_compress_struct jcs;
// 声明错误处理器,并赋值给jcs.err域
struct jpeg_error_mgr jem;
jcs.err = jpeg_std_error(&jem);
jpeg_create_compress(&jcs);
2、指定压缩后的图像所存放的目标文件,注意,目标文件应以二进制模式打开
f=fopen("03.jpg","wb");
if (f==NULL)
{
delete [] data;
delete [] pDataConv;
return 0;
}
jpeg_stdio_dest(&jcs, f);
3、设置压缩参数,主要参数有图像宽、高、色彩通道数(1:索引图像,3:其他),色彩空间(JCS_GRAYSCALE表示灰度图,JCS_RGB表示彩色图像),压缩质量等,如下:
jcs.image_width = nWidth; // 为图的宽和高,单位为像素
jcs.image_height = nHeight;
jcs.input_components = 1; // 在此为1,表示灰度图, 如果是彩色位图,则为3
jcs.in_color_space = JCS_GRAYSCALE; //JCS_GRAYSCALE表示灰度图,JCS_RGB表示彩色图像
jpeg_set_defaults(&jcs);
jpeg_set_quality (&jcs, 80, true);
需要注意的是,jpeg_set_defaults函数一定要等设 置好图像宽、高、色彩通道数计色彩空间四个参数后才能调用,因为这个函数要用到这四个值,调用jpeg_set_defaults函数后,jpeglib 库采用默认的设置对图像进行压缩,如果需要改变设置,如压缩质量,调用这个函数后,可以调用其它设置函数,如jpeg_set_quality函数。其实 图像压缩时有好多参数可以设置,但大部分我们都用不着设置,只需调用jpeg_set_defaults函数值为默认值即可。
4、上面的工作准备完成后,就可以压缩了,压缩过程非常简单, 首先调用jpeg_start_compress,然后可以对每一行进行压缩,也可以对若干行进行压缩,甚至可以对整个的图像进行一次压缩,压缩完成后, 记得要调用jpeg_finish_compress函数,如下:
jpeg_start_compress(&jcs, TRUE);
JSAMPROW row_pointer[1]; // 一行位图
int row_stride; // 每一行的字节数
row_stride = jcs.image_width; // 如果不是索引图,此处需要乘以3
// 对每一行进行压缩
while (jcs.next_scanline < jcs.image_height) {
row_pointer[0] = & pDataConv[jcs.next_scanline * row_stride];
jpeg_write_scanlines(&jcs, row_pointer, 1);
}
jpeg_finish_compress(&jcs);
5、最后就是释放压缩工作过程中所申请的资源了,主要就是jpeg压缩对象,由于在本例中我是直接用的局部变量,所以只需调用jpeg_destroy_compress这个函数即可,如下:
jpeg_destroy_compress(&jcs);
三、解压缩步骤
解压缩步骤与压缩步骤非常相似,只是解压缩对象为jpeg_decompress_struct类型,步骤如下:
1、声明并初始化解压缩对象,同时制定错误信息管理器
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
2、打开jpg图像文件,并指定为解压缩对象的源文件
FILE *f = fopen(strSourceFileName,"rb");
if (f==NULL)
{
printf("Open file error!\n");
return;
}
//
jpeg_stdio_src(&cinfo, f);
3、读取图像信息
jpeg_read_header(&cinfo, TRUE);
4、根据图像信息申请一个图像缓冲区
data = new BYTE cinfo.image_width*cinfo.image_height*cinfo.num_components];
5、开始解压缩
jpeg_start_decompress(&cinfo);
JSAMPROW row_pointer[1];
while (cinfo.output_scanline < cinfo.output_height)
{
row_pointer[0] = &data[(cinfo.output_height - cinfo.output_scanline-1)*cinfo.image_width*cinfo.num_components];
jpeg_read_scanlines(&cinfo,row_pointer ,
1);
}
jpeg_finish_decompress(&cinfo);
6、释放资源
jpeg_destroy_decompress(&cinfo);
fclose(f);
好了,利用IJG JPEG Library进行图像压缩就介绍到这里,希望对大家有所帮助,实例代码已经实现了图像的压缩和解压缩的全部功能,命令格式 为:“TestLibjpeg.exe j|j24|b 源文件名 目标文件名”,其中,j选项将源文件压缩为jpg格式,不改变色彩模式,j24选项将源文件压缩为24为jpg格式,b选项将源文件解压缩为bmp格式, 该实例并没有提供文件有效性的验证,如果要引入自己的代码,请自己实现文件有效性的验证。

⑩ 怎么用PHP压缩GIF图

缩图小软件ImageResizerPowertoys
微软出品的免费缩图小软件,它不但能够快速、批量地缩小图片,而且操作超级简单。安装结束后,它会在你的鼠标右键菜单中嵌入一个"ResizePicture"项。在图片文件上点右键选这个"ResizePicture"即可设置你希望缩小的图片尺寸。

JPEG Imager 2.1.2.25 汉化版
JPEG Imager 能将 BMP、JPG、PNG、GIF 等格式的图形文件进行压缩,使文件变得更小,可自设压缩比例、大小、明暗度等等,它采用了一种新压缩算法:“智能过滤(smart filtration)”不仅可以改善图像的观感质量,而且还可为输出的图片“减肥”,允许压缩后的图形文件不失真。还可以建立类似于渐变 GIF 效果的渐变式 JPEG 图像,这种形式的 JPEG 图像应用于网页制作可使网页读取的速度加快。它的特点还包括对图像进行批量处理高效建立缩略图以及利用自带的滤镜、图像编辑器对图形进行简单的处理等。

阅读全文

与libjpeg压缩jpg相关的资料

热点内容
nc编程软件下载 浏览:382
如何限制手机app的使用 浏览:307
安卓华为手机怎么恢复桌面图标 浏览:956
我的世界电脑版服务器地址在哪找 浏览:533
违抗了命令 浏览:256
安卓如何实现拖拽放置 浏览:91
净资产收益率选股指标源码 浏览:599
血压力传感器计算公式单片机 浏览:466
全网接口vip影视解析源码 浏览:916
如何破解服务器远程密码错误 浏览:377
平安深圳app如何实名认证 浏览:500
linux网络监控软件 浏览:889
内网服务器如何上传文件 浏览:140
程序员在你心中是什么 浏览:1
苹果手机怎么找回app账号 浏览:466
房屋中介网站源码 浏览:29
命运格数算法 浏览:852
ets3编程 浏览:730
怎么制作音乐相册的文件夹 浏览:566
宁夏重加密硅灰用法 浏览:231