写真のオリジナルデータからSHA-256ハッシュを生成し、バイト単位で完全一致する重複写真を確実に検出します。全く同じ内容の写真を見逃しません。
知覚ハッシュ(pHash)とハミング距離を使って、JPEG/PNG形式の違いや軽微な編集差分があっても見た目が似た写真を検出します。しきい値は1〜20の範囲でスライダー調整が可能です。
検出されたペアは詳細画面で2枚並んで表示され、ファイル名・サイズ・解像度・撮影日・ハッシュ値・アセットIDを比較できます。差異のある項目は赤字でハイライトされます。
解析済みの写真はSwiftDataでローカルに保存されるため、2回目以降のスキャンは新規追加分のみ処理されます。設定画面からキャッシュを削除して全件再スキャンすることもできます。
HashingServiceがPHAssetのオリジナルデータをフェッチしてSHA-256ハッシュを計算します。データベース内の全ハッシュをグループ化して値が一致するものを重複ペアとして抽出します。ハッシュ計算はTask.detachedでバックグラウンド実行され、最大6並列で処理されるためUIをブロックしません。
ImageComparatorがCoreImageフィルター(ガウシアンブラー+グレースケール)を適用した17×16ピクセルの画像からビット配列を生成します。2枚のpHash間のハミング距離を計算し、設定したしきい値以下のペアを類似画像として検出します。UInt64×4のビット演算で高速処理されます。
DetailViewは2枚の写真を横並びに表示し、それぞれのファイル名・サイズ・解像度・撮影日・ハッシュ値(先頭8文字)・アセットIDをMetadataRowで比較します。値が異なる行は赤字でハイライトされるため、どちらを残すべきかすぐに判断できます。削除後は自動的に再スキャンして一覧に反映されます。
解析済み写真のlocalIdentifier・exactHash・resizedHash・pHashはSwiftDataでデバイスにローカル保存されます。スキャン開始時にライブラリとDBを同期し、新規追加分のみハッシュを計算します。削除済み写真のレコードも自動的にDBから除去されます。設定画面の「解析データを消去」から全件再解析できます。
「完全一致スキャン」または「類似画像スキャン」ボタンをクリックすると、写真ライブラリへのアクセス許可を確認してスキャンが始まります。初回は全写真のハッシュを計算するため時間がかかります。進捗はパーセンテージで表示されます。
一覧に表示された重複ペアをクリックすると詳細画面が開きます。2枚を並べてファイル名・サイズ・解像度・撮影日などを比較し、残したい写真を確認します。差異のある項目は赤字で表示されます。
詳細画面の「この写真を削除」ボタンをクリックすると、Photosライブラリから写真が削除されます。削除後は自動的に再スキャンされて一覧が更新されます。
"写真ライブラリに何千枚もたまっていた重複写真をまとめて整理できました。完全一致スキャンは確実で、間違って必要な写真を消してしまう心配がありません。2枚並べてメタデータを比較できるので、どちらを残すか自分で判断できるのが安心です。"
"類似画像スキャンが便利です。連写で撮った似た写真をまとめて検出してくれるので、整理の手間が大幅に減りました。しきい値をスライダーで調整できるのも使いやすい。2回目以降のスキャンが速いのも助かります。"
"シンプルな操作で重複写真を安全に削除できます。詳細画面で差異のある項目が赤字で表示されるのでわかりやすいです。スキャン中もキャンセルできるので安心して使えます。MacのPhotosライブラリ整理に重宝しています。"
ご不明な点はこちらをご確認ください