皮皮网

【源码下载站名】【生活o2o 源码】【html5的项目源码】jpeg源码下载

2024-11-18 16:20:08 来源:源码燕窝保存方法

1.如何使用libjpeg
2.音视频探索(5):JPEG格式与Libjpeg库编译移植
3.如何用Visual Studio编译IJG JPEG库

jpeg源码下载

如何使用libjpeg

       æœ¬æ–‡åªä»‹ç»jpeg压缩的相关内容,刚开始我贪图省事,采用微 软 的GDI Plus提供的功能,很是方便,先获取jpg图像的编码,然后根据图像的位图数据创建一个Bitmap类的对象,再保存图像为jpg格式就行了。但是我对 GDI+还是很信任,总感觉不踏实(没有理由的),我们的系统一旦安装就要长期运行,我就是担心长期运行一段时间后GDI+会出问题,结果也证实了我的担 心,我们实际使用的套系统中有一套,连续运行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(".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, , 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|j|b 源文件名 目标文件名”,其中,j选项将源文件压缩为jpg格式,不改变色彩模式,j选项将源文件压缩为为jpg格式,b选项将源文件解压缩为bmp格式, 该实例并没有提供文件有效性的验证,如果要引入自己的代码,请自己实现文件有效性的验证。

音视频探索(5):JPEG格式与Libjpeg库编译移植

       音视频探索(5):JPEG格式与Libjpeg库编译移植

       libJPEG-turbo是一个强大的JPEG图像处理库,广泛应用于Android系统图像压缩,下载尤其在保证图像质量和色彩丰富的源码场景。然而,下载源码下载站名为适应低版本Android手机,源码系统内部的下载压缩算法并未采用全速的哈夫曼编码,因为这会占用过多CPU资源。源码本文将采用Cmake工具编译libJPEG-turbo源码,下载并利用JNI/NDK技术,源码定制哈夫曼编码接口,下载提升Android中的源码生活o2o 源码压缩性能。

       哈夫曼编码是下载一种高效的无损压缩方式,它根据字符出现概率分配不同长度的源码码字,出现频率高的下载字符编码较短。在图像压缩中,源码通过扫描图像数据确定像素概率,html5的项目源码构造赫夫曼树,生成对应码表。例如,构建一颗赫夫曼树,其带权路径长度可通过叶子结点的手机号码网站源码权重和路径长度计算得出。

       在libjpeg库中,压缩JPEG过程涉及分配结构体、设置输出、参数设置、按行处理数据等步骤。视频播放器易语言源码而解码则包括初始化对象、指定数据源、读取头部参数和解压数据等操作。源码分析显示,压缩和解压的核心结构体包含图像信息、参数配置和工作空间指针等关键部分。

       要编译移植libjpeg-turbo,首先在Android工程中配置CmakeLists.txt,然后编译生成对应的libjpeg.so文件。在使用时,需将库头文件和动态库引入到项目中,并在Java层编写JNI方法,实现Java与C/C++的交互,从而实现JPEG图像的高效编码和解码。

如何用Visual Studio编译IJG JPEG库

       ã€€ã€€ä»¥ä¸‹æ˜¯å‡ ä¸ªé‡è¦çš„步骤:

       ã€€ã€€1、到IJG官方网站上下载JPEG库的源代码,目前最新的版本是第9版, mand prompt,cd 到源代码所在文件夹。注意,command prompt 和cmd是有区别的,不要用cmd,也不要用X这个配置的。

       ã€€ã€€4、然后在命令行中键入:

       ã€€ã€€D:\libjpeg\jpeg-9>nmake -f makefile.vc setup-v

       ã€€ã€€è¾“出:

       ã€€ã€€Microsoft (R) Program Maintenance Utility Version ...

       ã€€ã€€Copyright (C) Microsoft Corporation. All rights reserved.

       ã€€ã€€ren jconfig.vc jconfig.h

       ã€€ã€€ren makejsln.v jpeg.sln

       ã€€ã€€ren makeasln.v apps.sln

       ã€€ã€€ren makejvcx.v jpeg.vcxproj

       ã€€ã€€ren makejfil.v jpeg.vcxproj.filters

       ã€€ã€€ren makecvcx.v cjpeg.vcxproj

       ã€€ã€€ren makecfil.v cjpeg.vcxproj.filters

       ã€€ã€€ren makedvcx.v djpeg.vcxproj

       ã€€ã€€ren makedfil.v djpeg.vcxproj.filters

       ã€€ã€€ren maketvcx.v jpegtran.vcxproj

       ã€€ã€€ren maketfil.v jpegtran.vcxproj.filters

       ã€€ã€€ren makervcx.v rdjpgcom.vcxproj

       ã€€ã€€ren makerfil.v rdjpgcom.vcxproj.filters

       ã€€ã€€ren makewvcx.v wrjpgcom.vcxproj

       ã€€ã€€ren makewfil.v wrjpgcom.vcxproj.filters

       ã€€ã€€è¿™ä¸ªå‘½ä»¤è¡Œæ˜¯ç”¨äºŽåˆ›å»ºVS 解决方案的,这个命令运行结束,源代码文件夹里将会生成sln和vcxproj文件的。

       ã€€ã€€5、用vs 打开解决方案,build(构建)它即可,随后将在源代码的文件夹下生成一个release文件夹,jpeg.lib就在其中

       ã€€ã€€...\..\Release\jpeg.lib

       ã€€ã€€========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

       ã€€ã€€åœ¨è¿™ä¸ªè¿‡ç¨‹ä¸­æ³¨æ„å¦‚果要调整编译输出方式为debug需要在configuration中新建Debug编译方式,同理X或其他编译方法也需要配置。

       ã€€ã€€6、注意不要编译成dll库,在jpeg的实现中是没有用导出符号的,函数在其他程序中是无法被识别的,在链接是会报错。

       ã€€ã€€7、使用lib库,在你的工程里正确配置lib库的路径,在属性对话框的配置栏中linker(链接器)的inpu(输入)中加上jpeg库的文件名即可。