在C++中获取JPEG文件的尺寸

6
我需要在C++中获取JPEG图像的尺寸。我正在寻找一个相当简单的方法或提供该功能的较小库。我是在OpenVMS上使用C++,所以任何外部库可能都必须被适应于我们的系统编译 - 因此,请不要给我发送链接到大型的闭源库!
有人遇到过什么东西可以解决这个问题,或者了解JPEG文件格式(我认为我可能是指JFIF文件格式),告诉我如何着手开发自己的解决方案?
6个回答

15

您有这个C函数,它可以为您提取相关数据。

这是一个C例程,但应该可以很好地编译C++。
将普通的FILE指针(来自fopen)传递给它,指向jpeg文件的开头,并设置两个int指针以获得图像的高度和宽度。

或者您可以在Boost库中找到一个jpeg类,它具有正确的函数(来自Adobe Generic Image Library)。

jpeg_read_dimensions

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

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

抱歉耽搁了 - 我刚结婚去了!现在回到我的桌子前了 :-(。我选择了C例程(尽管顶部的#define很可怕 - 我将其重写为函数)。 - Dominic Rodger
恭喜你们俩! - VonC
返回“许多快乐!” - EvilTeach
@VonC 第一个链接失效了,但这是另一个链接,看起来一样?http://carnage-melon.tom7.org/stuff/jpegsize.html - Ben
@Steve 谢谢。第一个链接已经修复。 - VonC

3

libjpeg是一款相对较小的开源软件,可在OpenVMS上使用。安装它可能比自己处理JPEG图像更快捷。


2

1

1

无需完整的libjpeg库即可获取此信息(除非您需要以其他方式处理图像)。 {{link1:ImageInfo}} 可能会对您有所帮助。这是一个Java类,但也有其他语言的端口,包括C ++。
正如指出的那样,Exif可能会更改这些信息(例如使用方向设置)。


0

您可能想尝试使用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教程以获取更完整的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接