Дата съёмки файла

   Копирование и перенос файлов для обычных пользователей превратился в неотъемлемую часть повседневной жизни многих людей. Благодаря развитию технологий и доступности различных устройств и сервисов, файлы могут перемещаться между компьютерами, смартфонами, планшетами и облачными хранилищами. Файл путешествует от устройства к устройству через «Телеграмм», затем попадает в облако, откуда его отправляют в «Вайбер» и переносят на планшет с iOS. И после закачивания на стационарный компьютер, с первого взгляда файл остаётся прежним. Открыв его свойства, можно обнаружить, что дата создания файла указана не в тот день, когда был произведен снимок, а например, в день, когда был скачан с флешки. Вроде бы, ну и что?

   У меня возникла проблема, когда нужно было отсортировать фотографии по дате. Мне надоело вручную перетаскивать фотографии с облака в нужную папку. Поскольку я программист и имею возможность закрепить свои знания языка C++, я решил написать программу для сортировки файлов по дате.

   Логично было предположить, что нужно взять дату создания файла из его свойств. Однако, учитывая вышесказанное, я понял, что на эту дату не стоит полагаться, так как при копировании файла, файловая система устанавливает её на текущую (также это зависит от операционной системы). В конечном итоге я нашел два способа получить нужную информацию.

   Первый способ из названия файла. Некоторые устройства, закладывают в имя файла дату снимка. Например такие:

  1. '20181106_140735' можно записать так 2018-11-06 14:07:35
  2. 'VID_20181106_140735' тоже самое что первое только видео
  3. 'IMG_20181106_140735' тоже самое что второе только изображение
  4. '1413784444909' unix время 2014-10-20 05:54:04 UTC
  5. '2018-05-22-12_24_10_828' или 'photo_2024-03-31_18-54-33' с ними тоже всё ясно.

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

Поиск данных в файлах     Второй метод более сложный и интересный. Речь идет о метаданных файла. В 1990 году IPTC (International Press Telecommunications Council) разработала свой стандарт свойств метаданных “Information Interchange Model” (IIM) для обмена новостями. Несколько лет спустя Adobe Systems, внедрила подмножество свойств IIM для своего программного обеспечения Photoshop и разработала технологию хранения метаданных под названием “Image Resource Block” для встраивания свойств метаданных в заголовочную часть файлов изображений. В сентябре 2001 года компания Adobe представила свою новую техническую платформу метаданных “Extensible Metadata Platform (XMP)” [Adobe-XMP], которая может рано или поздно сделать “Image Resource Blocks” устаревшими. В 2012 году основные определения модели данных и синтаксиса XML были определены ISO как стандарт 16684-1 [ISO-XMP]. Я пытался найти этот стандарт в свободном доступе, но нашёл только платный. В 2004 году IPTC и Adobe совместно разработали “IPTC Core Schema for XMP” предопределили несколько свойств IIM в новой среде XMP. В 2007 году IPTC собрала требования из различных секторов профессионального фотобизнеса – с акцентом на новостную съемку и стоковую фотографию – и опубликовала эти требования в своем Официальном документе по метаданным фотографий за 2007 год. Получив широкое одобрение этого документа, IPTC разработала спецификации для “Схемы расширения IPTC” и слегка пересмотрела основные спецификации IPTC. Обе спецификации были выпущены в виде единого документа под названием “IPTC Photo Metadata Standard” в 2008 году и были обновлены, или расширены в 2009, 2014, 2016, 2017, 2019, 2021, 2022 и 2023 годах. Кому интересно поподробнее почитать о спецификации можно пройти по ссылке.

   Для получения метаданных из файла в C++ есть такая библиотека “ExifTool”. С помощью неё, можно получить много чего интересного. Например наименование производителя камеры, модель камеры, ориентация камеры в пространстве, дата и время редактирования. Но самое интересное это данные геолокации. Страна, регион, город, временная зона. Или данные GPS. Дата и время, высота в метрах относительно уровня моря, широта, долгота, скорость в узлах или указанных единицах измерения (км/ч, миль/ч, м/с), точное направление по компасу в градусах, точное направление по компасу камеры в градусах, угол тангажа в градусах с положительным шагом вверх, угол крена в градусах.

   Впечатляющая информация? Единственный нюанс состоит в том, что некоторые данные появятся в том случае если устройство поддерживает эти функции. В своём списке фото, я вообще не нашёл GPS данных. Ради интереса, настроил сохранение фото на своём смартфоне с геолокацией. Но так её в файле и не нашёл. Ещё с определённого периода, моя фотокамера была настроена с опозданием на год и пару часов, после чего приходилось вручную настраивать дату.

Поиск данных в файлах    Внутри файлов профессиональных фотографов, я находил их подписи с именем автора и обозначение авторских прав. В фотографиях отредактированных в фоторедакторе (Photoshop, GIMP, Krita и т.д.), была найдена информация по всей истории редактирования. От даты редактирования, для каждого изменения, до цветокоррекции и названия редактора.

   Но этот способ тоже не является панацеей, так как попадаются фото которые были отсканированы и естественно дата фотографии отличается от даты создания цифровой версии.

   В целом в моём случае редко не было даты создания файла. И моя программа хорошо упростила мне задачу. Разработку и тестирование программы проводил в ОС Linux (у вас до сих пор Windows?). Во время сортировки, файлы раскладываются по каталогам по следующей топологии - год/месяц/день.месяц.год/имя файла. С программой можно ознакомится по ссылке.

   Резюмируя, хочу посоветовать: перед фото/видеосъёмкой корректировать дату аппарата. Если есть функция сохранять дату в имя файла, включать и её тоже. Но самый надёжный способ - добавлять дату поверх фото, хотя это не каждого устроит и реализовать программу сортировки будет сложнее.