У меня есть некоторые файлы cr2.
Я хотел бы сделать программу C++ или написать сценарий, который отделяет разные файлы cr2 с разными фокусными расстояниями и помещает их в отдельные каталоги.
Как я могу это сделать?
У меня есть доступ к Canon EDSDK и LibRaw, но я не уверен, где я могу найти информацию о фокусном расстоянии.
У меня также есть небольшая утилита "ExifTool", которая может читать метаданные, но я не знаю, как заставить ее делать что-то, что я хочу, - и версия gui, кажется, падает при чтении 5000 файлов по сети...
Пожалуйста, может кто-нибудь дать мне предложение?
Спецификацию EXIF можно найти здесь:
http://www.exif.org/specifications.html
Вам нужно будет прочитать данные EXIF и найти запись, содержащую "тег" 37386 или 0x920A. За этим следует номер "RATIONAL", который представляет собой по существу два целых числа без знака, составляющих фракцию, например 400/20 = 20 мм, как и 80/5 или 20/1. 14,5-мм объектив должен быть (по крайней мере) сохранен как 29/2, но может быть сохранен как 145/10 или 1450/100 - или большое количество других вариантов.
Конечно, если вы используете, например, ExifTool, вы можете легко сделать это со сценарием или использовать его Perl-привязку для написания скрипта на Perl.
Существует также интерфейс C++ для использования с exiftool: http://owl.phy.queensu.ca/~phil/cpp_exiftool/
Используя TagInfo
который вы вернетесь из ImageInfo()
, должно быть возможно найти FocalLength и соответствующим образом переместить файлы.
Я не собираюсь писать код для вас, но приведенная выше информация должна быть в состоянии дать вам представление.