我需要在C ++中获取JPEG的图像尺寸。我正在寻找一种相当简单的方法或提供该功能的小型库。我在OpenVMS上使用C ++,因此任何外部库都可能需要在我们的系统上进行编译 - 所以请不要向我发送大型,封闭源库的链接!
有没有人遇到任何可能做到这一点的事情,或者理解JPEG文件格式(我想我可能在这里指的是JFIF文件格式)告诉我如何才能推出自己的解决方案?
答案 0 :(得分:13)
您有C function这可能会为您提取相关数据。
这是一个C例程,但应该用C ++编译好 将它传递给普通的FILE指针(从fopen)到jpeg文件的开头,并用图像的高度和宽度设置两个int指针。
或者您可以在Boost library找到具有正确功能的jpeg课程(来自Adobe Generic Image Library)。
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以获取更完整的示例。