以EXIF格式查找数据

时间:2014-07-03 08:20:55

标签: c++ exif

我的程序问题是从.JPG文件下载DateTimeOrginal数据。我在互联网上找到了关于它的文件:

http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html

我看到我正在寻找的数据是0x9003地址。

所以我现在要做的是:

temp = fopen(name, "rb");

打开文件二进制文件

fseek (temp, 0x9003, SEEK_SET);

将文件指针移动到地址

fscanf(temp, "%s", str);

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

考虑到OP的编程风格,我建议在https://github.com/mayanklahiri/easyexif使用Easyexif 它相对容易集成。请注意,fseek()转到文件位置;它不会搜索某个数字。