我需要在C++中获取JPEG图像的尺寸。我正在寻找一个相当简单的方法或提供该功能的较小库。我是在OpenVMS上使用C++,所以任何外部库可能都必须被适应于我们的系统编译 - 因此,请不要给我发送链接到大型的闭源库!
有人遇到过什么东西可以解决这个问题,或者了解JPEG文件格式(我认为我可能是指JFIF文件格式),告诉我如何着手开发自己的解决方案?
有人遇到过什么东西可以解决这个问题,或者了解JPEG文件格式(我认为我可能是指JFIF文件格式),告诉我如何着手开发自己的解决方案?
您有这个C函数,它可以为您提取相关数据。
这是一个C例程,但应该可以很好地编译C++。
将普通的FILE指针(来自fopen)传递给它,指向jpeg文件的开头,并设置两个int指针以获得图像的高度和宽度。
或者您可以在Boost库中找到一个jpeg类,它具有正确的函数(来自Adobe Generic Image Library)。
boost::gil::jpeg_read_dimensions (const char *filename)
libjpeg是一款相对较小的开源软件,可在OpenVMS上使用。安装它可能比自己处理JPEG图像更快捷。
无需完整的libjpeg库即可获取此信息(除非您需要以其他方式处理图像)。 {{link1:ImageInfo}} 可能会对您有所帮助。这是一个Java类,但也有其他语言的端口,包括C ++。
正如指出的那样,Exif可能会更改这些信息(例如使用方向设置)。
您可能想尝试使用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教程以获取更完整的示例。