【问题标题】:Get dimensions of JPEG in C++在 C++ 中获取 JPEG 的尺寸
【发布时间】:2008-11-25 12:12:42
【问题描述】:

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

有没有人遇到过任何可以解决问题的方法,或者了解 JPEG 文件格式(我想我可能在这里指的是 JFIF 文件格式)来告诉我如何着手推出自己的解决方案?

【问题讨论】:

    标签: c++ jpeg openvms


    【解决方案1】:

    你有这个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。

    【讨论】:

    • 抱歉耽搁了 - 刚刚失踪结婚!现在回到我的办公桌前 :-(。我选择了 C 例程(尽管顶部的#defines 很糟糕 - 将它们重写为函数)。
    • 恭喜你们!
    • return Many Happy return Many Happy!
    • @VonC 第一个链接已失效,但这是另一个,看起来一样吗? carnage-melon.tom7.org/stuff/jpegsize.html
    • @Steve 谢谢。第一个链接是固定的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      也许是libjpeg

      【讨论】:

        【解决方案4】:

        您应该可以将此jpeg lib 与此patch for OpenVMS 一起使用

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            GDAL 为 C、C++ 和脚本语言提供了大量的 API。当然,它支持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 以获得更完整的示例。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-05-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-06
              • 1970-01-01
              • 2012-10-26
              • 1970-01-01
              相关资源
              最近更新 更多