web-dev-qa-db-ja.com

Shotwellは重複をどのように検出しますか?

グーグルでこれに対する答えを見つけることができませんでした。同じフォルダの写真を2回インポートすると、Shotwellは重複する写真をスキップします。しかし、どのように重複を検出しますか?いくつかの理由で同じ名前の写真の2つの異なるフォルダーをインポートすると、Shotwellはそれらが重複していると見なしますか?または、ファイルサイズも考慮して、誤った重複を発生させないようにしますか?または、それは写真をハッシュし、偽の複製をほとんど不可能にしますか?

4
Hubro

単純な名前よりも高度なものだと思います。試しただけです。実際、それはまったく名前に基づいていないように思われます。

だから私は次のものを作成しました:

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.

インポートした2つは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.pngyellow.pngおよびpink2.pngでした。

そのため、ハッシュアルゴリズムを使用していると思います。

A4ページで色の1ピクセルだけを緑から黄色に変更すると、重複として検出されないほど正確です。かなり正確です!

実際、私はちょうどこの投稿を見つけました here

このバグが修正されると、Shotwellは(排他的に)ファイルの完全なMD5ハッシュを使用して重複チェックを実行します。これは、重複を見つける非常に正確な方法です。

実際、 ソースコード の732行目は次のとおりです。 称賛@ジェレミー・ミゼレス

imported_full_md5_table.has_key(prepared_file.full_md5)) {

MD5ハッシュを使用しているようですね。

ここからディレクトリツリーの形状

11
Tim