查找 EXIF 格式的数据

Gen*_*ode 4 c++ exif

我的程序出现问题,用于从 .JPG 文件下载 DateTimeOrginal 数据。我在网上找到了有关它的文档:

https://ExifTool.org/TagNames/EXIF.html

我看到我要查找的数据位于 0x9003 地址。

所以现在我想做的是:

temp = fopen(name, "rb");
Run Code Online (Sandbox Code Playgroud)

打开文件二进制

fseek (temp, 0x9003, SEEK_SET);
Run Code Online (Sandbox Code Playgroud)

将文件指针移动到该地址

fscanf(temp, "%s", str);
Run Code Online (Sandbox Code Playgroud)

并将数据加载到 char[] 结构中。

至少其中任何一个是正确的吗?我仍然认为我的地址有问题,因为编译该程序后我只看到文件中的一些垃圾。

Pao*_*oli 5

EXIF 数据嵌入到 jpeg 标签 APP1 (0xE1) 中。

首先要做的是在流中找到jpef标签0xE1;你必须扫描所有jpeg标签(用0xFF+标签标记,在你的例子中是0xFF,0xE1)。获取标签后,通过读取接下来的 2 个字节找到其长度(并调整为高位优先),然后获取标签的内容。

获取标签的内容后,然后在其中查找您感兴趣的 EXIF 标签 (0x9003)。

开源项目 Imebra 的 jpeg 类中的方法 readStream 为您提供了如何解析 jpeg 标签的示例: https: //bitbucket.org/binarno/imebra/src/2eb33b2170e76b5ad2737d1c2d81c1dcaccd19e5/project_files/library/imebra/src/jpegCodec。 cpp?at=default#cl-867