使用libjpeg对图像进行压缩


libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。Libjpeg不仅可以把bmp格式转化成jpg格式,还支持其他格式的转化成jpg格式(例如ppm,gif,targa,rle等)。

 转化流程如下:

(1) 分配和初始化一个JPEG压缩对象

在libjpeg中,JPEG压缩对象被定义为“struct  jpeg_compress_struct”(这个结构体内部有一些子结构体,这些子结构体时通过“malloc”来分配空间的,我们的程序不会直接使用这些结构体)。

我们还需要定于错误处理器。这里我们仅使用默认的错误处理器,默认的错误处理器会把警告/错误信息输出到stderr,如果出现致命错误,将会调用exit()退出程序。

绑定错误处理器的代码如下:

      struct jpeg_compress_struct cinfo;

      struct jpeg_error_mgr jerr;

      ...

      cinfo.err = jpeg_std_error(&jerr);

      jpeg_create_compress(&cinfo);

jpeg_create_compress会分配一小段内存,如果我们机器内存过少则会分配失败。在这种情况下error handler会处理错误并退出程序。这就是为什么error handler为什么需要首先进行初始化的原因。

  • 1
  • 2
  • 下一页

相关内容