powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вторничный фотографЪ
69 сообщений из 69, показаны все 3 страниц
Вторничный фотографЪ
    #39773098
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

Шкурный вопрос.

Имеется директория с фотками. Снятая разными моделями цифровых мыльниц. Fuji, Canon, Olimpus и д.т. И мобилами.
Код: sql
1.
2.
DCS_0118.jpg
IMG_9234.jpg



И вобщем есть идея разложить их по каталогам по дате создания. Дату создания - брать из специальных
EXIF-тегов. Они хранятся в шапке файла. См.фрагмент под катом.

Код: plaintext
1.
2.
3.
4.
[ Exif IFD0 ] Date/Time = 306 (2013:08:29 21:09:06)
[ Exif IFD0 ] YCbCr Positioning = 531 (Datum point)
[ Exif IFD0 ] Related Image Width = 4097 (3264)
[ Exif IFD0 ] Related Image Height = 4098 (2176)



Хотелось-бы на выходе получить нечто вроде.

Код: sql
1.
2.
2013/01-20/2013-01-20_16.74_Canon_3264x2176.jpg
2010/03-30/2010-03-30_00.23_Fuji_2048x1536.jpg



В данной задаче я предполагаю что 99% всех фоток это именно jpg-формат. Другие как-то не представлены.
Да и соотв проблем с другими не будет в силу их ограниченного количества. Как-то так.

Подозреваю что кто-то уже находил готовый софт или что-то делал для себя. Но меня конечно будут интересовать
не готовые продукты а некие скрипты или код. В основном чтобы "подпилить под себя". Сделать требуемый
формат имени файла и разложить по годам или по месяцам. И добавить доп-инфо к имени. Каким снято
фотиком.


Вторичная задача - дедупликация. Хм... тоже немаловажно. Бывает - промахнешся и скопируешь тонну файлов.
А потом еще раз.

Реализация - на любом ЯП. С++/Python e.t.c. Конешно хотелось-бы чтоб на Windows и на Linux летало.

Go-go кодить! У меня пока еще своего решения нет. Так что... gogo!
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773115
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень...

А задача вроде плёвая :) ставим какой-нить exiv2, например, и дальше дело техники: осталось распарсить строку и подставить полученные переменные по формату (то есть никакой фантазии, строго рутинная работа по парсингу строки и подгонке шаблонов). Да и у любого языка есть своя собственная либа для работы с exif тэгами :) Так что и тут всё просто.

Насчёт вторичной задачи, при такой ошибке копирования у каждой системы есть свои правила изменения имени (у меня вот добавляется "(копия)" к названию)... по указанному шаблону очень легко отслеживаются и удаляются все дубли, если названия исходных файлов однотипны, как у камеры, которая их генерирует автоматически. так что rm с нужным шаблоном решит проблему в 2 секунды :)
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773158
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел exiv2. Эта консольная тулза работает с 1 файлом. Маловато...

Gogo кодить!
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773164
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВторичная задача - дедупликация. Хм... тоже немаловажно. Бывает - промахнешся и скопируешь тонну файлов.
А потом еще раз.Программ поиска (и удаления) дубликатов - аки грязи.
maytonХотелось-бы на выходе получить нечто вроде.
Поиск по словам "export exif data to text file". Потом сливаешь любой подходящей тулзой в текстовый файл полное имя файла, размер, дату-время, прочее что надо. Обрабатываешь полученный список и строишь батч-файл переименования (элементарно делается в Excel). Выполняешь. Профит.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773169
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если дата создания файла совпадает с датой съемки (обычно совпадает если позже фотка не корректировалась), то можно по дате создания распихать по подпапкам. Дату создания любым ЯП элементарно получить.

ИМХО имя файла нет смысла менять, оставь как есть, думаю ты не часто снимал разными девайсами в один день.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773175
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Exiftool адаптируй
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773181
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт дедупликации - каков критерий равенства каков?
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой критерий?

Поскипаем пока делупликацию.

Залача-прим - разложить фотки по датам. При этом количество на входе и на выходе должно совпалать.
Файлы без exif даты - сложить в отдельный folder (unsorted).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773253
KpoxaPym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то тут и программу писать не надо. Совсем.

Поиск дубликатов - Auslogics Duplicate File Finder.

Переименование файлов кучей, Excel + Total Commander.

Для отображения EXIF-информации в Total Commander есть плагин, что ещё больше упрощает задачу.

P.S. Конкретно EXIF-плагин сам не использовал, всё остальное работает - быстро и удобно.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773273
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПосмотрел exiv2. Эта консольная тулза работает с 1 файлом. Маловато...

Gogo кодить!
ну это не мешает путем перенаправления ввода\вывода организовать конвеер в цикле
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773285
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KpoxaPymКонкретно EXIF-плагин сам не использовал
Отлично работает. Нужен только TC+плагин, ничего другого не требуется.
Только нужно иметь ввиду ряд нюансов. Например в EXIF дата/время могут быть в разных полях и на разных фотоаппаратах эта логика отличается.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773293
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВторичная задача - дедупликация. Хм... тоже немаловажно. Бывает - промахнешся и скопируешь тонну файлов.
Если это бинарные копии файлов, то это легко решается тем же TC.
Способов много. Например прямо в диалоге поиска файлов можно включить поиск дубликатов по полю плагина [=wdhash.CRC32], но это будет очень медленно. Намного быстрее будет переименовать файлы с помощью плагина (в CRC32, например) и делать поиск дубликатов по совпадению части имени файла и размера.
Если же нужен поиск идентичного содержимого, то тут надежного решения нет. Из бесплатных лучшие результаты я получил в VisiPics, но все равно нужно просматривать найденные дубли самому, часто ошибается.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773299
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще я для сортировки фотографий использую следующий шаблон:

/photos/{category}/{year} {album}/{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})

Здесь:
{category} - категория фотографий (личные, путешествия, технические), задается вручную
{year} - год съемки
{album} - в зависимости от категории место съемки или наименование события
{ymd} - дата в формате ГГГГММДД
{hm} - время в формате ЧЧММ (без секунд)
{####} - порядковый номер фотографии в альбоме
{crc32} - контрольная сумма в нижнем регистре
{tag} - пометка для случаев специальной съемки (hdr, burst и т.п.)
{device} - производитель фотоаппарата
{model} - модель фотоаппарата

Наличие CRC32 в имени файла позволяет находить оригиналы и дубли, даже если файл редактировался.
Дата/время в начале файла позволяет сортировать в порядке съемки.
Порядковый номер исключает появление разных файлов с одним именем.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773311
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПосмотрел exiv2. Эта консольная тулза работает с 1 файлом. Маловато...

Gogo кодить!

Не вижу проблемы :) Разумеется вместо того, чтобы показывать exif данные, их можно обработать и пересохранить файлик
bashfor file in ./*.jpg; do exiv2 $file; done
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773366
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KpoxaPym, нету у меня тотал коммандер. У меня - Linux.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773375
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Вообще я для сортировки фотографий использую следующий шаблон:

/photos/{category}/{year} {album}/{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})

Здесь:
{category} - категория фотографий (личные, путешествия, технические), задается вручную
{year} - год съемки
{album} - в зависимости от категории место съемки или наименование события
{ymd} - дата в формате ГГГГММДД
{hm} - время в формате ЧЧММ (без секунд)
{####} - порядковый номер фотографии в альбоме
{crc32} - контрольная сумма в нижнем регистре
{tag} - пометка для случаев специальной съемки (hdr, burst и т.п.)
{device} - производитель фотоаппарата
{model} - модель фотоаппарата

Наличие CRC32 в имени файла позволяет находить оригиналы и дубли, даже если файл редактировался.
Дата/время в начале файла позволяет сортировать в порядке съемки.
Порядковый номер исключает появление разных файлов с одним именем.
Спасибо. Хороший шаблон. Но у меня будет попроще. Например категория мне не нужна.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773384
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли дата создания файла совпадает с датой съемки (обычно совпадает если позже фотка не корректировалась), то можно по дате создания распихать по подпапкам. Дату создания любым ЯП элементарно получить.

ИМХО имя файла нет смысла менять, оставь как есть, думаю ты не часто снимал разными девайсами в один день.
Я-бы файл тоже сделал уникальным. Бывает тот-же регистратор фоткает файлы с ограниченным циклом.
И в серии разных фоток будет две с одним номером например. И потом эти два одинаковые файла уже
почтой не переслать. В один фолдер - не скопировать. Вобщем.. имя файла тоже должно быть уникальным.
Вариант - сквозная нумерация для одной даты. Или контрольная сумма как товарищ фотограф делает там у себя.
Но мне контрольная сумма кажется слишком уж большим балластом для глаз.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773390
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБывает тот-же регистратор фоткает файлы с ограниченным циклом.
И в серии разных фоток будет две с одним номером например.
И потом эти два одинаковые файла уже почтой не переслать.Вот как раз при отправке - никаких проблем с одноимёнными вложениями.
При получении - да, возникают сложности.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773395
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Наличие CRC32 в имени файла позволяет находить оригиналы и дубли, даже если файл редактировался.

По поводу уникальности. Есть персептивный хеш. Но это лучше отдельным топиком.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773416
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crc32 вполне достаточен. У меня на 20 ГБ фотографий коллизий не было, при этом он быстро считается.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.crc32 вполне достаточен. У меня на 20 ГБ фотографий коллизий не было, при этом он быстро считается.
У меня часто было такое. Хотел кода-то зааплодить фотку. Или приаттачить. Не влезла по размеру. Сделал scale. Сохранил.
Лежат две фотки. Один контент. Разный размер и контрольная сумма. Но ладно... я это подниму отдельным топиком.
Типа умная дедупликация.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773501
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonРазный размер и контрольная сумма.
Так в том и смысл сохранять crc32 в имени файла, чтобы при изменении файла он все равно сохранялся оригинальный.
Иначе нужно использовать инструменты сравнения по содержимому, а они медленные и неточные.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773502
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.maytonРазный размер и контрольная сумма.
Так в том и смысл сохранять crc32 в имени файла, чтобы при изменении файла он все равно сохранялся оригинальный.
Иначе нужно использовать инструменты сравнения по содержимому, а они медленные и неточные.
Инструменты сравнения могут работать единоразово. После скидывания содержимого фотика. Или слияния
архивов и прочее. Да мне вообще-то пофиг сколько они будут работать. Есть коробочная утилита fdupes для
Linux. Она работает на уровне скорости дискового чтения файлов. Временная сложность - линейна от объема
файлов. Но мой интерес даже не в том быстро она работает или медленно. А просто в том чтобы убедится что
каталог фоток имеет относительный порядок.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773505
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не про fdupes и прочие бинарные утилиты.
Если на картинке изменить exif, то такие утилиты посчитают этот файл уникальным.
Для поиска дубликатов фотографий нужно использовать специальные утилиты, которые сравнивают содержимое (контент), например VisiPics. А они медленные и неточные, и как следствие интерактивные.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773515
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Я не про fdupes и прочие бинарные утилиты.
Если на картинке изменить exif, то такие утилиты посчитают этот файл уникальным.
Для поиска дубликатов фотографий нужно использовать специальные утилиты, которые сравнивают содержимое (контент), например VisiPics. А они медленные и неточные, и как следствие интерактивные.
Давайте разделим 2 направления.
1) Дедупликация контрольной суммой (crc32/md5). Полностью автоматически позволяет убрать дубликаты. Здесь - вопросов
вообще нет. Решенная уже задача.

2) Дедубликация на основе персептивного хеша - работает в режиме диалога. Или в режиме рекомендаций,
всего-лишь предлагая пользователю ознакомится с кандидатами на удаление. Я так думаю.

По поводу изменения 1 exif-тега. Такой кейс мне представляется сомнительным. Я никогда в жизни этого
не делал и не понимаю ценности этого действия. Предполагаю что 99.9% мои файлы что я фоткал мыльницами
никогда не меняли своих тегов кроме тех случаев когда я редактировал размер-яркость-контраснтность но
это вообще выходит за рамки пункта (1) и соотв нет вопросов. С точки зрения контрольной суммы - это вообще
другой файл.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773520
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменение тэга это например поворот на 90 градусов (смена ориентации).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773529
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Изменение тэга это например поворот на 90 градусов (смена ориентации).
Интересный кейс. Давайте это я дам чуть позже отдельным топиком. А в этом я хотел-бы просто
продолжить раскладывание фоток по датам?

OK?
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773646
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот любопытная библиотечка Metadata-extractor. Вроде в ней все есть.
https://github.com/drewnoakes/metadata-extractor

По поводу данного шаблона.
Код: sql
1.
/photos/{category}/{year} {album}/{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})


Я думал о реализации его так и эдак и у меня выходит какой-то скриптовый язык программирования
внутри приложения.

Вобщем цена вопроса. Что делать если нужного тега нет? А он входит в шаблон как элемент директории.
Например:
Код: sql
1.
/photos/{YYYY}/{MM}/{DD}/{model}_{YYYY}{MM}{DD}_{width}x{height}.jpeg



В данном шаблоне некоторые алиасы такие как width, height являются mandatory для любого файла.
Я 100% их найду значения. Но как быть если один из атрибутов (YYYYMMDD) будет незаполнен?

Будет такой вот странный path, который скорее всего будет некорректен с точки зрения файловой системы.
Код: sql
1.
/photos////CannonPowerShoot__1280x750.jpeg


Нужно какое-то генерализованное решение и красивое с точки зрения шаблона.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773658
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дата и время у файла есть всегда.
Не в EXIF, так в атрибутах.
Правда может быть так, что они могут различаться, но тут общего решения не существует.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773661
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБудет такой вот странный path, который скорее всего будет некорректен с точки зрения файловой системы.
Код: sql
1.
/photos////CannonPowerShoot__1280x750.jpeg


Для линукса не знаю, а в виндовсе корректен и равнозначен такому
Код: sql
1.
/photos/CannonPowerShoot__1280x750.jpeg
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773702
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton/photos/{YYYY}/{MM}/{DD}/{model}_{YYYY}{MM}{DD}_{width}x{height}.jpeg
Сомнительный шаблон.
Зачем в имени файла размерность изображения?
Почему модель вынесена в начало (сортировка будет по модели)?
Почему нет времени или счетчика? Или в течение дня будет только одна фотография?

Я бы советовал использовать мой шаблон, в нем ничего лишнего и он выверен практикой.
Единственное, что я не указал — если одно и то же событие снималось разными фотографами, то в каталоге альбома я создаю подкаталоги на каждого фотографа и уже внутри них идет "{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})".
Для фотографий важно упорядочивание по хронологии, поэтому дата или счетчик должны быть в начале файла. Модель фотоаппарата является чисто информационным атрибутом, поэтому должна быть в конце или вообще не указываться. Я указываю, потому что по модели можно понять, что следует ожидать на фотографии (какое качество и особенности).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773709
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается даты/времени, то нужно учитывать следующее.
Во-первых, в EXIF есть несколько тэгов для этого: Date/Time, DateOriginal/TimeOriginal, DateDigitized/TimeDigitized, DateTimeStr (это не считая проприетарных и нестандартных полей). И разные вендоры по разному понимают, что и в какие поля нужно записывать.
Во-вторых, кто-то пишет в эти поля локальное время, а кто-то UTC. Кто-то учитывает сдвиг часового пояса, кто-то нет (в зависимости от свежести ПО).
В-третьих, возможны ситуации, когда дата/время в EXIF не совпадает с датой/временем в атрибутах файла (например на устройстве часы выставлены неточно, но имеется GPS, а в EXIF записывается время со спутника).
И для этих моментов нет общего решения. Нужно или принять для себя какой-то общий принцип (например определить приоритеты полей), или для каждой модели обрабатывать данные индивидуально.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773711
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, метаданные есть не только в EXIF.
Есть IPTC, есть расширения JPEG, есть форматы tiff/tga.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Почему нет времени или счетчика? Или в течение дня будет только одна фотография?

Я бы советовал использовать мой шаблон, в нем ничего лишнего и он выверен практикой.
Единственное, что я не указал — если одно и то же событие снималось разными фотографами, то в каталоге альбома я создаю подкаталоги на каждого фотографа и уже внутри них идет "{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})".
Для фотографий важно упорядочивание по хронологии, поэтому дата или счетчик должны быть в начале файла. Модель фотоаппарата является чисто информационным атрибутом, поэтому должна быть в конце или вообще не указываться. Я указываю, потому что по модели можно понять, что следует ожидать на фотографии (какое качество и особенности).
Согласен насчет счетчика. Добавлю. С моделью у меня будет попроще. У меня их просто меньше.
И сам знаю чего ожидать.

Ваш шаблон выверен вашей практикой. Я не фотограф. И нет у меня таких глобальных задач с тегами.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39773749
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Во-первых, в EXIF есть несколько тэгов для этого: Date/Time, DateOriginal/TimeOriginal, DateDigitized/TimeDigitized, DateTimeStr (это не считая проприетарных и нестандартных полей). И разные вендоры по разному понимают, что и в какие поля нужно записывать.
Во-вторых, кто-то пишет в эти поля локальное время, а кто-то UTC. Кто-то учитывает сдвиг часового пояса, кто-то нет (в зависимости от свежести ПО).
Я соберу статистику. Скорее всего будет просто система приоритетов. Если есть какой-то тег - я его беру.
Если нет - смотрю другой.

Если вообще не найдены никакие атрибуты времени - возьму за основу дату создания файла.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39774391
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я по поводу дублирования. Более десятка лет назад был самодельный ехе для винды. Название imageduplex.exe (или dupless). Выполняет поиск в файловой системе рисунков, "похожих" на предложенный эскиз или файл.
Автор объяснял работу. Не помню, шла ли речь об ... как это?.. когда сжимают до маленького квадратика. Основное помню в том, что сходство определялось не в геометрическом пространстве (по крайней мере нетолько в геометрическом), а в цветовом, путём разновидности кластеризации. Именно так я бы тоже тогда и делал бы.

Я только несколько раз посмотрел работу проги, ну и показывал ещё. Мы соглашались, что "похожесть" была достаточно обоснованной.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39774401
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Персептивный хеш. Впервые я прочитал про это на хабре.
Кажется этот линк https://habr.com/ru/post/120562/
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39775049
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно взять готовую программу
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39775068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну.. не знаю. Неспортивное это. В топике разработки обсуждать готовые продукты.

Кроме того я вот планировал делать безопасное переименование. Оставлять старый каталог.
И создавать новый в hardlinks.

Опасная эта операция я вам доложу. Ошибёшься - половину фоток потеряешь.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #39778354
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UP. Прошу прощения за безделие и праздность. От задачи я не отказываюсь. Буду делать. Фотки по прежнему
лежат и ждут сортировки.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вторничный фотографЪ
    #40091636
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Up. Приложение готово. Всякая ботва с распознаванием образов, html и thumnails отвлекли меня от задачи-прим.
И сегодня эта задача сделана.

Фотки я уже успешно раскладываю по фолдерам. Детектирует exif-tag и верный формат даты.
Утилита имеет внешний вид консоли.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
usage: java -jar photo-time-sort.jar -d <arg> [-f <arg>] [-o <arg>] -s
       <arg> [-t <arg>] [-x <arg>]
 -d,--dest <arg>         Dest folder
 -f,--timeformat <arg>   Comma-separated local date-time format for exif
                         tag. Default = 'yyyy:MM:dd HH:mm:ss'
 -o,--pathformat <arg>   Output folder format. Default =
                         'yyyy/MM/dd/HH-mm-ss'
 -s,--source <arg>       Source jpeg files folder
 -t,--trash <arg>        Unrecognized files
 -x,--exiftags <arg>     Comma-separated exif-tags list. Default =
                         'DateTime,DateTimeOriginal,DateTimeDigitized'



В утилите много хардкода и недостаточно гибкости но главную задачу я уже решил. Дальше дорабатывать буду
по мелочам.

Вот как выглядел фолдер с фотками до.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
|   |-- IMG_0043.JPG
|   |-- IMG_0044.JPG
|   `-- Thumbs.db
|-- 109_1309
|   |-- IMG_0045.JPG
|   `-- Thumbs.db
|-- 110_1409
|   |-- IMG_0046.JPG
|   |-- IMG_0047.JPG
|   `-- Thumbs.db
|-- 111_1609
|   |-- IMG_0049.JPG
|   |-- IMG_0050.JPG
|   `-- Thumbs.db
|-- 112_1909
|-- 113_2409
|   |-- IMG_0053.JPG
|   `-- Thumbs.db
|-- 114_3009
|   |-- IMG_0054.JPG
|   |-- IMG_0055.JPG
|   |-- IMG_0056.JPG
|   |-- IMG_0058.JPG



И вот как после.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
|-- 2008
|   |-- 06
|   |   `-- 27
|   |       |-- 17-49-43.JPG
|   |       `-- 17-50-27.JPG
|   `-- 07
|       `-- 01
|           `-- 15-54-27.JPG
|-- 2011
|   |-- 03
|   |   `-- 06
|   |       `-- 13-54-28.JPG
|   |-- 07
|   |   |-- 01
|   |   |   |-- 01-02-55.JPG
|   |   |   |-- 03-46-52.JPG
|   |   |   |-- 03-47-26.JPG
|   |   |   |-- 03-47-44.JPG
|   |   |   |-- 05-51-58.JPG
|   |   |   |-- 05-52-24.JPG
|   |   |   |-- 05-53-38.JPG
|   |   |   `-- 05-54-17.JPG
|   |   |-- 14
|   |   |   |-- 04-59-51.JPG
|   |   |   `-- 05-36-43.JPG


Формат и глубину можно менять. Можно сцепить год+месяц или сделать квартальные группы фоток.

В отличие от html-индексатора данная утилита работает аккуратно и не трогает оригинал. Он в принципе может
лежать на DVD диске или в сетевом диске в readonly а каталог получатель - будет просто копировать в
себя фотки с новыми названиями. Я решил что это более безопасно даже для моего дев-тестинга.
Мало-ли какая ошибка может быть с фолдерами....

Можно вытащить из тегов название и модель цифровика. И тогда каталог может иметь структуру
разного качества снимков. Что-то снято мыльницей. И что-то зеркалкой. Это еще не реализовано
но реализация будет элементарной на базе того что уже есть.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091637
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2) Unrecognized - или trash. Это отдельный опциональный фолдер куда будут падать фотки снятые
без соотв. тега с датой. В настоящий момент у меня таких мало. Меньше процента. Но все таки терять
их не будем и они будут к сведению лежать в отдельной структуре сохраняя имена и папки как было.

3) TimeFormat - это набор шаблонов которые мы будем пытаться применить к дате. Некоторые цифровики
делают не совсем корректную дату типа 2012:10:18 1:54:45 где час стоит без ведущего нуля. Она не парсится
единым паттерном (в инструментарии Java8/time). Нужно делать 2 чтобы последовательно применяя
найти нужную рабочую подстановку.

4) Я попробую релизнуть это в 3х форматах бинарников.
- java (jar)
- Linux x64 (Graal compiler)
- Win x64 (Graal compiler)

Эксперименты с Graal я провел успешно. По крайней мере под Linux все работает. Думаю что Graal компиллятор
под Windows не будет капризным и я тоже его релизну. Но чуть позже чем остальные.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091716
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нужен ли в линуксах скомпилированный файл?
Там по-моему java-машина есть всегда.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091719
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За все линуксы не скажу. Насчет всегда - не знаю. В моём варианте jdk доустанавливалась
с помощью apt-get install ...
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091722
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, в выходном имени файла я бы советовал не разделять дефисом часы-минуты-секунды.
Лучше их писать подряд, а разделитель приберечь для чего-то более полезного, хоть для модели аппарата.

И как я вижу, CRC в имени файла отсутствует.
Я все же советую его добавить.
Файлы в течение долгого времени могут незначительно модифицироваться, причем изменяться может даже не содержимое, а метаинформация (например тэг ориентации). CRC позволит искать оригиналы/дубликаты, не проводя анализ и распознавание образов, это будет просто на порядки быстрее и проще.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091727
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет модели аппарата - я подумаю. Идея хорошая. Как вариант - добавить ее к формату

Код: sql
1.
'yyyy/MM/dd/HH-mm-ss'



К сожалению exif-теги не гарантируют наличия модели аппарата. Или они могли быть обработаны
какой-то утилитой-анонимайзером. Или будучи скачаны с соц-сетей аналогично.

Тоесть если мы хотим добавить модель цифровика то нужна опция замены на тот случай когда тега нет.

Например

Код: sql
1.
'yyyy/MM/dd/${model(default=Unknown)}-HHmmss'



Насчет CRC я не очень понял полезность этого атрибута. Если вы слегка потрогали размеры или покрутили
тон-яркость-насыщенность то CRC меняется кардинально а фотка субъективно - одна и таже.

Но в принципе сделать не сложно. Так на 1 story-point :)
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091747
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например у меня на жестком диске есть куча фотографий.
В этой куче множество дубликатов разного рода.
Где-то я создавал подкаталог по дате и копировал в него каталоги со смартфона — соответственно в разных подкаталогах часть фотографий будет дублироваться. Впрочем это самый простой сценарий, потому что тут файлы-дубликаты одинаковые, они легко находятся по имени и размеру.
Какие-то фотографии передавались другим пользователям (на другие телефоны) по Bluetooth, соц.сети или мессенджеры, и бэкапились уже другие телефоны. Тут будут дубли будут в бэкапах разных устройств. К тому же при передаче фотографий могли меняться размеры, изменяться или удаляться тэги (EXIF) и т.п., то есть по со содержимому файлы уже будут различаться.
Еще фотографии могут редактироваться, например обрезаться или корректироваться по освещению/тону/кривым. Тут уже и само изображение будет изменено, и имя файла как правило изменяется. Но обычно оригинальное имя файла все же сохраняется, просто к нему дописывается суффикс.
Фотографии могут масштабироваться под разные разрешения (подготавливаются заранее, чтобы на разных платформах они не масштабировались автоматически с потерей качества) — аналогично предыдущему, изменяется все, но оригинальное имя файла обычно сохраняется.

Если имя файла будет состоять только из счетчика или таймштампа, то оригинал по имени файла не найти, поскольку такое имя будет неуникально.
А вот если в имени файла будет присутствовать CRC, то он конечно не гарантирует отсутствие коллизий, но на практике коллизии крайне редки и он почти гарантировано будет уникальным.
А с именами файлов работать намного проще, чем с парсерами изображений — хоть в Total Commander (Multi-Rename Tool, поддерживает регулярные выражения), хоть в множестве готовых утилит по массовому переименованию файлов, хоть сохранив имена файлов в текстовый файл.

Например в Total Commander есть два таких крайне полезных инструмента, как мультипереименование и поиск дубликатов.
И оба поддерживают файловые плагины, в том числе такие полезные, как exif (тэги EXIF) и wdhash (разные хеши, в том числе CRC32).
При поиске дубликатов я просто сравниваю CRC в имени файла с рассчитанным CRC — и все изменения/дубли/оригиналы как на ладони.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091756
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уговорил. Добавлю CRC как опцию. Могу и MD5 добавить.

Для себя проблему дедубликации решил утилитой fdupes

https://ru.wikipedia.org/wiki/Fdupes

Она находила не то что файлы а целые каталоги фоток которые я по ошибке скопировал
не туда (рука на мышке дрогнула).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091760
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сценарий бэкапов следующий.

Время от времени я скидываю фотографии с источников (смартфон, фотоаппарат) на диск.
Затем делаю массовое переименование по шаблону "{album, location, event}/{ymd}{hm}_{crc32} [{tag}] ({device} {model})".
Затем ищу дубли между обработанным каталогом (с новыми фотографиями) и основным каталогом (с бэкапом).
Дубли в новом каталоге убираю, а оставшиеся фотографии перемещаю в основной каталог с бэкапами.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091762
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я выбрал CRC, а не MD5, потому что он слишком длинный и сложно считается.
Если помещать его в начало имени файла, то остаток (с датой, временем и прочим) не будет виден, да и сортировка слетит.
Если помещать его в конец имени файла, то остаток не будет виден и визуально его будет не сравнить.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091765
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что такое tag?

Код: sql
1.
 "{album, location, event}/{ymd}{hm}_{crc32} [{tag}] ({device} {model})"
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091768
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Для себя проблему дедубликации решил утилитой fdupes
https://ru.wikipedia.org/wiki/Fdupes

Если бы все было так просто, то и CRC бы не потребовался.
В том же Total Commander тоже есть побайтовое сравнение.
Проблема в том, что изменения могут быть внесены в метаинформацию — собственно изображение будет тем же, но fdupes будет считать файлы разными.
И изменения иногда могут быть внесены вообще незаметно для пользователя. Например при просмотре фотографий на ПК если фотографию повернуть на 90 градусов, некоторые просмотрщики изменяют тэг ориентации в EXIF.
Или иногда я копирую часть фотографий для публикации, убираю в них EXIF, иногда еще и уменьшаю размеры — фактически это дубли, а при бинарном сравнении они найдены не будут.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091770
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tag это какие-то специальные режимы фотографирования.
Например при серийной съемке добавляется тэг burst, при склейке панорам добавляется тэг pano и т.п.
В обычных фотографиях этого тэга нет (вместе с обрамляющими квадратными скобками).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091800
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
привет, разбираете exif-теги полностью своим кодом, или пользуетесь какой-то готовой библиотекой? Если своим, то нет ли ссылки на понятное описание формата? Я, после того, как вы задачу озвучили (в теме про страницу с фотками), почитал, но так толком и не разобрался, как найти начало тега.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091810
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
mayton,
привет, разбираете exif-теги полностью своим кодом, или пользуетесь какой-то готовой библиотекой? Если своим, то нет ли ссылки на понятное описание формата? Я, после того, как вы задачу озвучили (в теме про страницу с фотками), почитал, но так толком и не разобрался, как найти начало тега.

Использую готовую библиотеку Apache Commons Imaging https://commons.apache.org/proper/commons-imaging/

Собственно всё мясо реализовано здесь. Остальное - это обертки. Консольное приложение и FileVizitor
который обходит файловую систему в сборе картинок.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
    
import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.Imaging;
import org.apache.commons.imaging.common.ImageMetadata;
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
import org.apache.commons.imaging.formats.tiff.TiffField;
import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
import org.apache.commons.imaging.formats.tiff.fieldtypes.FieldType;


public Optional<String> safeGetValue(TiffField tiffField) {
        try {
            return Optional.of(tiffField.getStringValue());
        } catch (ImageReadException e) {
            return Optional.empty();
        }
    }

    public Optional<LocalDateTime> tryigToApplyDatePattern(String dateTimeVal, List<String> datePatterns) {
        for(String datePattern : datePatterns) {
            try {
                DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(datePattern);
                LocalDateTime localDateTime = LocalDateTime.parse(dateTimeVal, dateTimeFormatter);
                return Optional.of(localDateTime);
            } catch (DateTimeParseException ex) {
                // Nothing to do
            }
        }
        return Optional.empty();
    }

    public Optional<LocalDateTime> fromFile(InputStream inputStream) {
        return fromFile(inputStream, asList("DateTime", "DateTimeOriginal", "DateTimeDigitized"), asList("yyyy:MM:dd HH:mm:ss"));
    }

    public Optional<LocalDateTime> fromFile(InputStream inputStream, List<String> exifTags, List<String> datePatterns) {
        ImageMetadata metadata;
        Optional<String> value = Optional.empty();
        try {
            metadata = Imaging.getMetadata(inputStream, null);
            if (metadata != null) {
                TiffImageMetadata items = ((JpegImageMetadata) metadata).getExif();
                if (items != null) {
                    for (TiffField field : items.getAllFields()) {
                        if (field.getFieldType() == FieldType.ASCII) {
                            String tagName = field.getTagName();
                            for(String tag : exifTags) {
                                if (tag.equals(tagName)) {
                                    value = safeGetValue(field);
                                    if (value.isPresent()) {
                                        return tryigToApplyDatePattern(value.get(), datePatterns);
                                    }
                                }
                            }
                        }
                    }
                } else {
                    logger.warn("No tiff fields detected!");
                }
            } else {
                logger.warn("No TiffImageMetadata detected!");
            }
            //JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
        } catch (ImageReadException e) {
            logger.error("ImageReadException", e);
        } catch (IOException e) {
            logger.error("IOException", e);
        } catch (DateTimeParseException e) {
            logger.warn("DateTimeParseException during parse " + value.get(), e);
        }
        return Optional.empty();
    }


Все это в статусе опенсорца и я выложу когда доведу до ума.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091811
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
mayton

Для себя проблему дедубликации решил утилитой fdupes
https://ru.wikipedia.org/wiki/Fdupes

Если бы все было так просто, то и CRC бы не потребовался.
В том же Total Commander тоже есть побайтовое сравнение.
Проблема в том, что изменения могут быть внесены в метаинформацию — собственно изображение будет тем же, но fdupes будет считать файлы разными.
И изменения иногда могут быть внесены вообще незаметно для пользователя. Например при просмотре фотографий на ПК если фотографию повернуть на 90 градусов, некоторые просмотрщики изменяют тэг ориентации в EXIF.
Или иногда я копирую часть фотографий для публикации, убираю в них EXIF, иногда еще и уменьшаю размеры — фактически это дубли, а при бинарном сравнении они найдены не будут.

Дедубликация - это все таки отдельная задача. И она - более сложная и интересная.
Я-бы хотел ее реализовать не через контрольные суммы а через персептивный хеш.
Все как выше по топику. Только к этому хешу я добавлю еще 4 проверки на поворот
фотографии.

И это будет отдельная утилита. Я хочу следовать принципам unix. Каждая тулза - простая
и решает узкую задачу. Если надо будет их соединить в цепочку или конвейер - то такая
возможность думаю будет.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091850
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, отдельная утилита будет логичным решением.
Но лично для меня наличие CRC в имени файла оказалось удобным.
Он решает две задачи.
Во-первых, помогает для поиска дублей/оригиналов (как я описал выше).
Во-вторых, обеспечивает уникальность имен файлов в альбоме, (почти) не нарушая очередности и не слишком загромождая имя файла. Если называть файлы по маске hhmmss (до секунды), то это все равно не гарантирует уникальности имени, потому что даже обычные фотографии иногда могут быть сняты в пределах одной секунды (не говоря уж о серийных фото). То есть в имя файла все равно нужно будет добавлять счетчик для уникальности: hhmmss_nnnn. А еще этот счетчик сильно мозолит глаза, если в нем есть пропуски, возникает желание его перенумеровать (что впоследствии чревато коллизиями). Я же именую файлы по маске hhmm_crc (где crc это 8 шестнадцатиричных символов). Всего на два символа длиннее, чем hhmmss_nnnn, однако позволяет забыть про неуникальность или коллизии имен файлов (у меня более 60 ТБ фото и ни разу не было коллизий). Есть некоторый минус в том, что в пределах одной минуты возможно нарушение очередности фотографий, но на практике это неудобство незначительное, обычно в подряд снимаемых фотографиях по сюжету легко восстановить хронологию (ну и в EXIF и атрибутах в любом случае сохраняется полная дата и время).
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091853
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, еще.
Если смартфон или фотоаппарат подключаются к ПК как MTP-устройство, а не как USB Mass Storage, то при копировании файлов возникает крайне неприятный баг, дата и время файлов не сохраняются (заменяются на текущие). Это нарушает порядок отображения галереи, да и вообще несет много неудобств. Поэтому я и пришел к тому, что дата и время должны присутствовать в имени файла.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091872
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Согласен. Любое перекидывание фоток через соцсети или портативные диски может как-то повлиять на дату
создания обновления.

Для меня - это уже технически решенная задача. Можно просто год и месяц добавить в файл.

Код: sql
1.
'yyyy/MM/dd/yyyy-MM-dd-HHmmss'



Кстати. Я вот думаю что из коробки уже готов и другой механизм. Читабельные названия месяцев.

Код: sql
1.
2021/AUG/8/2021-AUG-8-16-35-00.jpg



Удобно ли это для человека?
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091879
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И август будет перед мартом?
В имени файла должны быть только цифры.
И лишние разделители не нужны, я бы 'yyyy/MM/dd/yyyy-MM-dd-HHmmss' заменил на 'yyyy/yyyy-MM-dd/yyyyMMddHHmmss'.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091881
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому-то удобно. В реферальных топиках (выше) я делал индексирование фоток в статичный HTML.

И для публикации людям иногда удобнее кликать не на 09 и 10 месяцы (ссылки)
а именно на символические названия AUG, SEP.

Просто мы люди так устроены. Ассоциацию вспоминаем. Например были крестины или свадьба в августе.
Сразу ясно куда кликать.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091893
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в HTML-файле список можно вывести в любом удобном порядке.
А список файлов (в файл-менеджере или диалоговом окне) обычно упорядочивается по названию файла.
И там буквенные наименования месяцев будут неудобны.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40091899
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда... это мысль. Разделить контент и отображение. Месяцы - можно символами но при сохранении стабильного
неубывающего порядка. JAN,FEB,MAR.....e.t.c.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40092441
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альфа версия

https://github.com/mayton-nosql/photo-time-sort/releases/tag/1.0-alpha

Бинари под Windows/Linux еще не собрал. Поэтому для исполнения нужен Java11.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40092453
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Просто мы люди так устроены. Ассоциацию вспоминаем. Например были крестины или свадьба в августе.
Сразу ясно куда кликать.
Мне теперь всегда на Авг кликать?
Хотелось бы ассоциирующихся подсказок, какой текуший месяц. Например в виде 08 или 03 и т.д.
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40092455
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы не хотел здесь обсуждать вопросы дизайна и публикации.

Это пожалуй лучше здесь спрашивать в старом топике который я спецом создавал
по дизайну https://www.sql.ru/forum/1337955-6/kartinki-lentoy-tablicy-ili-divs
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40092464
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Читабельные названия месяцев.
Код: sql
1.
2021/AUG/8/2021-AUG-8-16-35-00.jpg


А вы что, не знаете что, по-крайней мере в Windows, вышеуказанное имя создаст три вложенные папки
2021
AUG
8
и в последней из них файл 2021-AUG-8-16-35-00.jpg.
Символ "/" в имени файла трактуется как папка.
Попробуйте, сами увидите...
Или так и задумано?
Тогда 2021-AUG-8 в имени файла совсем излишне...
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40092471
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вторничный фотографЪ
    #40092474
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i
А вы что, не знаете
Знает, конечно.Тогда 2021-AUG-8 в имени файла совсем излишне...А если файл перемещается/копируется за пределы исходной иерархии, то получается, что хреновый из вас дизайнер.
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вторничный фотографЪ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]