Как Shotwell обнаруживает дубликаты?
Не могу найти ответы на это с Google. При двойном импорте одной и той же папки изображений Shotwell пропускает дубликаты фотографий. Но как он обнаруживает дубликаты? Если я импортирую две разные папки с изображениями, некоторые из которых по каким-то причинам имеют одно и то же имя, будет ли Shotwell считать их дубликатами? Или это также влияет на размер файла, делая ложные дубликаты маловероятными? Или он хеширует картинки, делая ложные дубликаты практически невозможными?
1 ответ
Я считаю, что это более продвинутый, чем простые имена, я только что попробовал. На самом деле может показаться, что он не основан на имени.
Поэтому я просто создал следующее:
TestDir
│
├─ blue.png #Blue A4 page
├─ blue2.png #Blue A4 page
├─ green.png #Blue A4 page
├─ red.png #Yellow A4 page
├─ yellow.png #Yellow A4 page
├─ yellow2.png #Yellow A4 page
└ TestDir2
│
├─ yellow.png #Blue A4 page
└─ yellow.png #Blue A4 page
Импортировал папку TestDir (которая также импортирует из любых подкаталогов). Это было уведомление:
6 duplicate photos were not imported:
/home/tim/Pictures/Test/red.png
/home/tim/Pictures/Test/yellow2.png
/home/tim/Pictures/Test/green.png
/home/tim/Pictures/Test/blue2.png
(and 2 more)
2 photos successfully imported.
Два импортированных файла были blue.png и yellow.png. Это потому, что они были созданы первыми (выбираются самые старые, если есть дубликаты).
Это было подтверждено следующим тестом:
TestDir
│
├─ blue.png #Blue A4 page
├─ blue2.png #Blue A4 page
├─ green.png #Blue A4 page (sorry OCD people)
├─ red.png #Yellow A4 page (sorry OCD people)
├─ yellow.png #Yellow A4 page
├─ yellow2.png #Yellow A4 page
├─ pink2.png #Pink A4 page
├─ pink.png #Pink A4 page
└ TestDir2
│
├─ yellow.png #Blue A4 page
└─ yellow.png #Blue A4 page
pink2.png
а также pink.png
были созданы. pink2.png
был создан первым, затем pink.png
8 duplicate photos were not imported:
/home/tim/Pictures/Test/red.png
/home/tim/Pictures/Test/yellow2.png
/home/tim/Pictures/Test/green.png
/home/tim/Pictures/Test/blue2.png
(and 4 more)
3 photos successfully imported.
Успешные импортированные были blue.png
,yellow.png
а также pink2.png
,
Из-за этого я предполагаю, что он использует алгоритм хеширования.
Достаточно точно, что изменение только одного пикселя цвета с зеленого на желтый на странице формата А4 приводило к тому, что он не распознавался как дубликат. Довольно точно тогда!
На самом деле, я только что нашел этот пост здесь:
Как только эта ошибка будет исправлена, Shotwell будет использовать (исключительно) полный MD5-хеш файла для проверки дубликатов, что является чертовски точным способом поиска дубликатов.
На самом деле в исходном коде в строке 732 это так: Kudos @ Jeremie Miserez
imported_full_md5_table.has_key(prepared_file.full_md5)) {
Похоже, он использует хэш MD5!