bash — извлекает даты из exif изображений на c ++ в переменных

Мне нужно оптимизировать этот код. В настоящее время этот код работает. Я могу извлечь тег datetimeoriginal из файла с помощью инструмента extern «exiftool». Но это слишком медленно, когда этот процесс повторяется. Есть ли способ извлечения этой информации в переменных напрямую?

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();
...
}

Извините за мою грамматику, я не являюсь носителем английского языка.

0

Решение

Есть ли способ извлечения этой информации в переменных напрямую?

Да, это возможно.

Вы можете либо найти и использовать библиотеку, которая может прочитать информацию EXIF ​​для вас, либо прочитать & понять JPEG & EXIF форматирует, и читайте файл самостоятельно.

Так как быстрый поиск обнаруживает несколько библиотек, которые делают эти вещи, и, по крайней мере, некоторая документация доступна для обоих стандартов, это не кажется слишком сложным.

Если вы читаете файл самостоятельно, обратите внимание, что формат файла JPEG содержит несколько разделов с тегами, включая как изображение, так и его метаданные — вам просто нужно пройтись по разделам, пока не найдете данные EXIF, а затем проанализировать их.

1

Другие решения

Выполнение ExifTool один раз для каждого файла может быть медленным, но есть способ запустить его, чтобы вы могли передать ему поток команд. Сначала создайте файл аргумента и оставьте его открытым для вывода; давайте назовем это args.txt. Тогда запусти

exiftool -stay_open True -@ args.txt

Для каждого файла запишите аргументы, один аргумент в строке, что-то вроде этого, в args.txt:

-datetimeoriginal
-timezone
{filename}
-execute

Когда закончите, напишите следующее в args.txt:

-stay_open
False

Это может дать вам достаточную производительность. Не закрывайте args.txt до тех пор, пока не закончите, но это поможет, если вы сбросите все буферы после каждого -execute.

0

По вопросам рекламы [email protected]