簡體   English   中英

在 C++ 中獲取 JPEG 的尺寸

[英]Get dimensions of JPEG in C++

我需要在 C++ 中獲取 JPEG 的圖像尺寸。 我正在尋找一種相當簡單的方法或提供該功能的小型庫。 我在 OpenVMS 上使用 C++ 工作,因此任何外部庫都可能必須適應在我們的系統上編譯 - 所以請不要向我發布指向大型封閉源代碼庫的鏈接!

有沒有人遇到過任何可以解決問題的方法,或者了解 JPEG 文件格式(我想我可能在這里指的是 JFIF 文件格式)來告訴我如何着手推出自己的解決方案?

你有這個C 函數可以為你提取相關數據。

這是一個 C 例程,但應該可以用 C++ 編譯。
將一個普通的 FILE 指針(來自 fopen)傳遞給一個 jpeg 文件的開頭,並將兩個 int 指針傳遞給圖像的高度和寬度。

或者您可能會在Boost 庫中找到一個具有正確功能的 jpeg 類(來自Adob ​​e Generic Image Library )。

jpeg_read_dimensions

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

返回指定位置的 JPEG 文件的寬度和高度。 如果位置不對應於有效的 JPEG 文件,則拋出 std::ios_base::failure。

libjpeg 相當小,是開源的,可在 OpenVMS 上使用。 安裝它可能比自己處理 JPEG 更快。

也許是libjpeg

您應該能夠將此jpeg 庫與此補丁一起用於 OpenVMS

不需要完整的 libjpeg 庫來獲取此信息(除非您需要對圖像執行其他操作)。 ImageInfo可能會對您有所幫助。 它是一個 Java 類,但也有其他語言的端口,包括 C++。
正如所指出的,Exif 可能會更改這些信息(例如,使用方向設置)。

您可能想嘗試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 教程以獲得更完整的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM