在C ++中获取JPEG的尺寸

时间:2008-11-25 12:12:42

标签: c++ jpeg openvms

我需要在C ++中获取JPEG的图像尺寸。我正在寻找一种相当简单的方法或提供该功能的小型库。我在OpenVMS上使用C ++,因此任何外部库都可能需要在我们的系统上进行编译 - 所以请不要向我发送大型,封闭源库的链接!

有没有人遇到任何可能做到这一点的事情,或者理解JPEG文件格式(我想我可能在这里指的是JFIF文件格式)告诉我如何才能推出自己的解决方案?

6 个答案:

答案 0 :(得分:13)

您有C function这可能会为您提取相关数据。

  

这是一个C例程,但应该用C ++编译好   将它传递给普通的FILE指针(从fopen)到jpeg文件的开头,并用图像的高度和宽度设置两个int指针。

或者您可以在Boost library找到具有正确功能的jpeg课程(来自Adobe Generic Image Library)。

jpeg_read_dimensions

boost::gil::jpeg_read_dimensions (const char *filename)
  

返回指定位置的JPEG文件的宽度和高度。如果位置与有效的JPEG文件不对应,则抛出std :: ios_base :: failure。

答案 1 :(得分:3)

libjpeg相当小,开源并且可以在OpenVMS上使用。安装它可能比自己处理JPEG更快。

答案 2 :(得分:2)

也许libjpeg

答案 3 :(得分:1)

您应该能够将此jpeg lib与此patch for OpenVMS

一起使用

答案 4 :(得分:1)

不需要完整的libjpeg库来获取此信息(除非您需要对图像执行其他操作)。 ImageInfo可能会对您有所帮助。它是一个Java类,但是有其他语言的端口,包括C ++ 正如所指出的,Exif可能会更改这些信息(例如,使用方向设置)。

答案 5 :(得分:1)

您可能想要尝试GDAL库,该库充当大量栅格数据格式的抽象层,主要用于GIS / RS的地理空间应用。

GDAL提供了许多API,适用于C,C ++和脚本语言。当然,它支持JPEG图像及其变体,如JPEG2000等。

这是一个非常简单的示例,如何打开JPEG图像并查询其尺寸:

#include <gdal_priv.h>

GDALAllRegister(); // call ones in your application

GDALDataset* ds = (GDALDataset*)GDALOpen("my.jpeg", GA_ReadOnly);
int width  = ds->GetRasterXSize();
int height = ds->GetRasterYSize(),
int nbands = ds->GetRasterCount();

检查GDAL API tutorial以获取更完整的示例。