我的程序问题是从.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 []结构。
至少是正确的吗?我仍然认为我的地址有问题,因为在编译该程序后我只看到文件中的一些垃圾。
答案 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()转到文件位置;它不会搜索某个数字。