Проект «Поиск фотографий по метаданным»

Search photos by metadata — Source code / VB .NET

Порой бывает так, что нужно найти фотографию, зная день, когда она была сделана. Например, день рождения или Новый год. Когда на просторах HDD лежит небольшая горстка фотографий, либо тот, кто собирал эти файлы приучен к порядку все называть своими именами, то проблем с поиском нет — как через любую поисковую программу, так и открытием сразу же нужной папки.
Но когда файлов тысячи, а к порядку ты себя стал приучать уже слишком поздно, возникает необходимость в хоть сколь-нибудь адекватном поиске. По атрибутам файлов (дате создания, открытия и т.д.) искать бывает бесполезно.

В большинстве даже дешевых мыльниц фотография содержит метаданные, которые можно использовать при поиске.
Я счел нужным производить поиск по двум параметрам — производитель оборудования и дата снимка.

Программа не является полноценным софтом, в ней лишь затрагиваются основы:
1) Работы с метаданными изображений
2) Работы с БД Access
А так же другие мелочи, которые могут быть интересны новичку.


Принцип работы программы заключается в том, что она использует свою базу, которую сначала нужно создать.
Поиск фотографий осуществляется только по БД. Если изображение не было в нее занесено, то оно не будет найдено.

Как создать БД
Жизнь программы начинается с кнопки «Поиск фото».
Предлагается выбрать каталог или раздел жесткого диска.
При выборе немедленно начинается поиск в папке (диске) и всех вложенных директориях (поиск только файлов *.jpg)
Процесс замедляется из-за того, что каждое изображение загружается в память для чтения его метаданных.
Если данные корректны, они записываются в БД.
Реализован контрольный список HashSet, который берет на себя роль отсеивания повторно попавшихся изображений во избежание их лишнего «открытия». Без него наносится довольно существенный удар по и так небольшой производительности.

В программе присутствует нехороший велосипед с поиском даты в фотографии. Разные производители пишут ее в разные ячейки свойств, поэтому программа предпринимает поиск такого поля среди нескольких смежных ячеек по длине записи.
Ведется статистика добавленных и не добавленных изображений и лог ошибок с причинами, почему те или иные изображения были отсеяны (например, полно файлов без метатегов)
На форме присутствует ProgressBar, но не стоит обольщаться на его счет: он не показывает реальный прогресс поиска, он просто показывает, что что-то добавляется.
После добавления данных они отображаются в DataGridView, который содержит такие столбцы, как «Путь», «Имя», «Дата», «Размер», «Оборудование», «Камера»

skrinshot_28-08-2015-14-30-11

Реализовано Превью изображений при навигации по списку. Двойной клик по миниатюре открывает изображение в программе по умолчанию.

Есть два поля для фильтра: по дате и модели устройства. Работают как поодиночке, так и совместно.
Для списка реализовано простейшее контекстное меню для базовых операций

contextmenu


 

Стоит помнить две вещи:

  • Новые файлы в базу сами не добавятся. Если был «прочесан» весь компьютер, а потом соседка принесла и «скинула» свои свежие или несвежие фотографии, то программа их, естественно, не найдет. Решение: Добавить каталог вручную. Если появилось уже много новых папок и никто не помнит, кто их положил, куда и когда, то есть смысл заново произвести поиск на диске. Это произойдет тем быстрее, чем меньше новых файлов было добавлено, спасибо HashSet, который быстренько отсеет повторно добавляемые файлы. Время на сам поиск, конечно, уйдет, от этого никуда не деться.
  • Утерянные на диске файлы сами себя из базы не удалят. Они так и будут находиться в DataGridView. Превью, разумеется, показано не будет. Если таких файлов стало много — пора задуматься об Актуализации базы данных

Актуализация базы данных призвана перепроверить все файлы на их существование и удалить неактуальные записи. Занимает мало времени.

В приложении проект (Поиск фотографий по дате Source.rar) и демонстрационная программа (Release.rar)
Использована БД Access 2003.

Скачать исходник программы (Проект VB .NET 2008) Программа поиска фотографий по метаданным

 

 





Запись опубликована в рубрике Исходники и проекты на Visual Basic .NET. Добавьте в закладки постоянную ссылку.


Что еще можно почитать

Princess Of The Night (Modern Talking Cover) (Декабрь 31, 2016)
Алимханов А. — Only Love Can Break My Heart (Modern Talking Extended 80’s Cover) (Апрель 1, 2017)
Midi Editor в Reaper — стираем ноты ПКМ (Декабрь 8, 2015)
Пример с чтением и сохранением данных из DataGridView в XML (Декабрь 4, 2015)
DoubleBuffered для компонентов формы (Декабрь 8, 2015)


Добавить комментарий