У меня есть несколько файлов cr2.
Я хотел бы создать программу на C ++ или написать скрипт, который разделяет различные файлы cr2 с разными фокусными расстояниями и помещает их в отдельные каталоги.
Как я могу это сделать ?
У меня есть доступ к Canon EDSDK и LibRaw, но я не уверен, где найти информацию о фокусном расстоянии.
У меня также есть небольшая утилита «ExifTool», которая может читать метаданные — но я не знаю, как заставить его делать то, что я хочу — и версия с графическим интерфейсом, кажется, дает сбой при чтении 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 и переместить файлы соответственно.
Я не собираюсь писать код для вас, но приведенная выше информация должна дать вам представление.
Других решений пока нет …