我的程序出现问题,用于从 .JPG 文件下载 DateTimeOrginal 数据。我在网上找到了关于它的文档:
https://ExifTool.org/TagNames/EXIF.html
我看到我正在寻找的数据位于 0x9003 地址。
所以现在我想做的是:
temp = fopen(name, "rb");
打开文件二进制
fseek (temp, 0x9003, SEEK_SET);
将文件指针移动到地址
fscanf(temp, "%s", str);
并将数据加载到 char[] 结构中。
至少有任何正确吗?我仍然认为我的地址有问题,因为在编译该程序后,我只看到文件中的一些垃圾。
最佳答案
EXIF 数据嵌入到 jpeg 标签 APP1 (0xE1) 中。
首先要做的是在流中找到jpef标签0xE1;您必须扫描所有 jpeg 标签(由 0xFF+tag 标记,在您的情况下为 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
关于c++ - 寻找 EXIF 格式的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24548516/