Files
SnapOtter/apps/docs/de/tools/image/find-duplicates.md
T
SnapOtterandGitHub 4963ab3bbd feat(docs-i18n): translate all documentation into 20 languages
All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
2026-07-11 13:52:47 +08:00

4.6 KiB

description, i18n_source_hash, i18n_provenance, i18n_output_hash
description i18n_source_hash i18n_provenance i18n_output_hash
Erkennt doppelte und nahezu doppelte Bilder mithilfe von perzeptuellem Hashing. 4e1f4413f90f human 50520e45b29d

Duplikate finden

Laden Sie mehrere Bilder hoch, um Duplikate und nahezu Duplikate mithilfe von perzeptuellem Hashing (dHash) zu erkennen. Gruppiert ähnliche Bilder, identifiziert die beste Qualitätsversion in jeder Gruppe und berechnet mögliche Speichereinsparungen.

API-Endpunkt

POST /api/v1/tools/image/find-duplicates

Akzeptiert Multipart-Formulardaten mit mehreren Bilddateien und einem optionalen JSON-Feld settings.

Parameter

Parameter Typ Erforderlich Standard Beschreibung
threshold number Nein 8 Maximaler Hamming-Abstand, um Bilder als Duplikate zu betrachten (0 bis 20). Niedriger = strengere Übereinstimmung

Datei-Felder

Laden Sie mindestens 2 Bilddateien in der Multipart-Anfrage hoch (alle unter dem Feldnamen file oder einem beliebigen Feldnamen für Dateibestandteile).

Beispielanfrage

curl -X POST http://localhost:1349/api/v1/tools/image/find-duplicates \
  -H "Authorization: Bearer si_your-api-key" \
  -F "file=@photo1.jpg" \
  -F "file=@photo2.jpg" \
  -F "file=@photo3.jpg" \
  -F "file=@photo4.jpg" \
  -F 'settings={"threshold": 8}'

Beispielantwort

{
  "totalImages": 4,
  "duplicateGroups": [
    {
      "groupId": 1,
      "files": [
        {
          "filename": "photo1.jpg",
          "similarity": 100,
          "width": 4032,
          "height": 3024,
          "fileSize": 2450000,
          "format": "jpeg",
          "isBest": true,
          "thumbnail": "data:image/jpeg;base64,/9j/..."
        },
        {
          "filename": "photo2.jpg",
          "similarity": 96.88,
          "width": 1920,
          "height": 1440,
          "fileSize": 850000,
          "format": "jpeg",
          "isBest": false,
          "thumbnail": "data:image/jpeg;base64,/9j/..."
        }
      ]
    }
  ],
  "uniqueImages": 2,
  "spaceSaveable": 850000,
  "skippedFiles": []
}

Antwortfelder

Feld Typ Beschreibung
totalImages number Anzahl der erfolgreich analysierten Bilder
duplicateGroups array Gruppen doppelter Bilder
uniqueImages number Anzahl der Bilder, die zu keiner Duplikatgruppe gehören
spaceSaveable number Gesamtzahl der Bytes, die durch Entfernen der nicht besten Duplikate eingespart werden könnten
skippedFiles array Dateien, die nicht verarbeitet werden konnten (mit Dateiname und Grund)

Objekt „Duplikatgruppe“

Feld Typ Beschreibung
groupId number Gruppenbezeichner
files array Bilder in dieser Duplikatgruppe

Datei-Objekt (innerhalb einer Gruppe)

Feld Typ Beschreibung
filename string Ursprünglicher Dateiname
similarity number Ähnlichkeitsprozentsatz zum Referenzbild (das erste in der Gruppe)
width number Bildbreite in Pixeln
height number Bildhöhe in Pixeln
fileSize number Dateigröße in Bytes
format string Bildformat
isBest boolean Ob dies die Version mit der höchsten Qualität ist (die meisten Pixel, größte Datei)
thumbnail string oder null Base64-JPEG-Vorschaubild (200 px breit) für die Vorschau

Hinweise

  • Verwendet einen 128-Bit-dHash (64-Bit-Zeile + 64-Bit-Spalte) zur Erkennung perzeptueller Ähnlichkeit. Damit werden Duplikate selbst über Größenänderungen, Neukompression und kleinere Bearbeitungen hinweg erfasst.
  • Der Schwellenwert steht für den maximalen Hamming-Abstand zwischen Hashes. Der Standardwert 8 erfasst nahezu Duplikate und vermeidet dabei Fehltreffer. Verwenden Sie 0 für ausschließlich pixelidentische Bilder oder 15-20 für eine sehr lockere Übereinstimmung.
  • Das „beste“ Bild in jeder Gruppe ist dasjenige mit den meisten Pixeln (Breite x Höhe), wobei die Dateigröße als Tiebreaker dient.
  • Es sind mindestens 2 Bilder erforderlich. Dateien, die die Validierung oder Decodierung nicht bestehen, werden in skippedFiles gemeldet, anstatt die gesamte Anfrage scheitern zu lassen.
  • Vorschaubilder sind 200 px breite JPEG-Vorschauen, die als Data-URIs codiert sind.
  • Alle gängigen Formate werden unterstützt (HEIC, RAW, PSD, SVG werden automatisch decodiert).