Как 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!

Формы для дерева каталогов отсюда

Другие вопросы по тегам