0

我需要优化这段代码。目前,此代码有效。我可以使用 extern 工具“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();
...
}

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

4

2 回答 2

1

有没有办法直接在变量中提取这些信息?

对的,这是可能的。

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

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

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

于 2016-02-08T12:53:05.620 回答
0

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

exiftool -stay_open True -@ args.txt

对于每个文件,将参数(每行一个参数)写入 args.txt:

-datetimeoriginal
-timezone
{filename}
-execute

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

-stay_open
False

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

于 2016-02-16T23:24:45.660 回答