在变量中提取 C++ 图像的日期 exif

Extract dates exif of images at c++ in variables

我需要优化这段代码。目前,此代码有效。我可以使用外部工具 "exiftool" 在文件中提取 datetimeoriginal 标签。但是当重复这个过程时,这太慢了。有没有办法直接在变量中提取这些信息?

void image::add_info_creation_date(char *name_jpg){  
//Execute exiftool in bash
stringstream ss;
ss << "exiftool.exe -datetimeoriginal -timezone images\" << name_jpg << " >> temporal.txt";
error = system(ss.str().c_str());
if (error != 0){
    printf("The value returned was: %d.\n", error);
    ss.clear();
    exit(1);
}
ss.clear();
...
}

对不起我的语法,我的母语不是英语。

is there a way the extract this information in variables directly?

是的,有可能。

您的选择是要么找到并使用可以为您读取 EXIF 信息的库,要么阅读并理解 JPEG 和 EXIF 格式,然后自己读取文件。

由于快速搜索会找到几个执行这些操作的库,并且由于至少有一些文档可用于这两种标准,所以看起来并不难。

如果您自己阅读文件,请注意 JPEG 文件格式包含多个标记部分,包括图像及其元数据 - 您只需遍历这些部分,直到找到 EXIF 数据,然后对其进行解析。

为每个文件执行一次 ExifTool 可能会很慢,但是有一种方法可以 运行 它以便您可以向它提供命令流。首先,创建一个参数文件并保持打开状态以供输出;我们称它为 args.txt。然后启动

exiftool -stay_open True -@ args.txt

对于每个文件,写参数,每行一个参数,类似这样,args.txt:

-datetimeoriginal
-timezone
{filename}
-execute

完成后,将以下内容写入args.txt:

-stay_open
False

这可能会让您获得足够的性能。在你完成之前不要关闭 args.txt,但是如果你在每次执行后刷新任何缓冲区会有帮助。