Pull to refresh

Comments 17

Ещё будет полезно писать в базу хэши md5 и периодически проверять не карапнулся ли файл

Саму базу файлов я пока никак не веду, в БД только кэш геометок
если что-то разместил или написал не так

Да х… с оформлением. Но почему конфиг на php с жестко зашитым расположением вместо cli интерфейса?
packagist.org/?query=comman%20line%20parser
Ну и базу sqlite взять, чтобы более портабельно было.
Да, согласен надо CLI сделать и SqlLite просто пока делал для личного использования все адреса вообще были хардкодом вшиты. Запишу в Todo
На самом деле, когда уже написал, нашел несколько инструментов:
www.sno.phy.queensu.ca/~phil/exiftool — ExifTool
www.geckoandfly.com/7987/how-to-change-exif-data-date-and-camera-properties-with-free-editor
arslan.io/2018/04/18/tips-tricks-to-batch-edit-exif-metadata-of-photos
en.wikipedia.org/wiki/Comparison_of_digital_image_metadata_editors

Как обычно, сначала пишем код, потом неожиданно находятся десятки аналогов :)

FastStone Image Viewer умеет раскидывать по дате из EXIF.
Проблемы начинаются когда обнаруживаешь что в фотках нет EXIF, или там стоит 1990 год, или фотки с нескольких устройств с одного мероприятия.

или фотки с нескольких устройств с одного мероприятия.

И одно ещё в московском времени, а другое уже в берлинском

Время можно исправить внутри Exif это намного эффективнее, чем править названия файлов.

Не готов изменять ни имя файла, ни экзифы.


Это может поломать механизм дедупликации.


Мало ли из каких бэкапов придётся восстанавливаться :)

Вы не поверите у меня такая структура уже 10 лет и я делаю это руками. Просто дисциплина. Автоматизация конечно хорошо — но проблема в том потом приходиться разгребать беспристрастные результаты алгоритма. Для полного счастья у меня камера и смена батарей сбрасывает время.
Это да, когда все сделано руками супер. Вопрос лишь в том, чтобы не забывать это делать день за днем, плюс фотографии с телефона, которые прилетают сразу по 1000 штук с разных локаций и дат и сортировать их руками очень не хочется.

У меня сначала фотки сбрасываются с аппарата и сортируются самодельным перловым скриптом, а затем уже я просматриваю, что получилось, переименовываю получившиеся папки, объединяя некоторые из них (если одно мероприятие длится больше одного дня). Под годы, месяцы и дни — отдельные папки (например, ~/photo/2019/10/04 — мне так удобнее, чем видеть в одном месте кучу папок за все дни)


Автор не столкнулся с корявыми датами в EXIF?
Во-первых хорошо бы брать DateTimeOriginal, ибо DateTime в EXIF часто не бывает
Во-вторых там частенько бывают кривые даты, формат которых зависит от производителей камер-телефонов-прошивки, что добавляет проблем, ниже функция нормализации, по крайней на тех 200к фото, которые у нас есть отработала все варианты. Фото совершенно из разных источников
function normalizeExifDateTimeOriginal( $date ) {
	$parsed 	= preg_replace('/\D+/', '#', $date);
	$exploded	= explode('#', $parsed);
	$parts	= array();
	foreach ($exploded as $part) {
		$parts[]	= intval($part);
	}
	$counts		= count($parts);
	if ( $parts[1] > 12 ) {
		$parts[1] = intval(substr($parts[1], 0, 2));
	}
	if ( $counts >= 3 ) {
		switch ($counts) {
			case 6:
				$normalized = vsprintf("%04d-%02d-%02d %02d:%02d:%02d", $parts);
			break;
			case 5:
				$normalized = vsprintf("%04d-%02d-%02d %02d:%02d:00", $parts);
			break;
			case 4:
				$normalized = vsprintf("%04d-%02d-%02d %02d:00:00", $parts);
			break;
			case 3:
				$normalized = vsprintf("%04d-%02d-%02d 00:00:00", $parts);
			break;
			default:
				$normalized = vsprintf("%04d-%02d-%02d 00:00:00", $parts);
			break;
		}
	} else {
		$normalized = date('c');
	}
	return $normalized;
}
Я сделал проще, не удалось из даты создать что-то нормальное, значит даты нет, берем дату файла. А так вообще да, надо копать какие там ошибки попадаются, и обходить их, спасибо!
Там внутри есть fallback на текущую дату $normalized = date('c');
Sign up to leave a comment.

Articles