compare — Bilder vergleichen und Differenzbild erzeugen

Praxis-Guide zu compare aus ImageMagick: zwei Bilder vergleichen, ein Differenzbild erzeugen und Metriken wie AE, RMSE oder SSIM für Regressionstests messen.

compare aus ImageMagick stellt zwei Bilder gegenüber und macht jeden Unterschied sichtbar – als farblich markiertes Differenzbild und als messbaren Zahlenwert. Damit prüfst du, ob sich ein Rendering, ein Export oder ein Screenshot gegenüber einer Referenz verändert hat. Über Metriken wie AE, RMSE oder SSIM und den passenden Exit-Code lässt sich der Vergleich automatisieren – ideal für visuelle Regressionstests in CI/CD-Pipelines. Unter ImageMagick 7 rufst du den Befehl bevorzugt als magick compare auf.

Grundlegender Vergleich

compare <image1> <image2> <diff-output> — Erzeugt ein visuelles Differenzbild, das Unterschiede rot hervorhebt.

compare original.png modified.png diff.png

compare -metric AE <image1> <image2> null: — Zählt die Anzahl der abweichenden Pixel (Absolute Error).

compare -metric AE original.png modified.png null:

compare -metric RMSE <image1> <image2> null: — Berechnet die Wurzel des mittleren quadratischen Fehlers (Root Mean Square Error) zwischen den Bildern.

compare -metric RMSE original.png modified.png null:

compare -metric SSIM <image1> <image2> null: — Berechnet den Structural Similarity Index (1.0 = identisch).

compare -metric SSIM original.png modified.png null:

Vergleichsmetriken

compare -metric AE <image1> <image2> null: — Absolute Error: Gesamtzahl der abweichenden Pixel.

compare -metric AE baseline.png current.png null:

compare -metric MAE <image1> <image2> null: — Mean Absolute Error: durchschnittliche Abweichung pro Pixel.

compare -metric MAE baseline.png current.png null:

compare -metric MSE <image1> <image2> null: — Mean Squared Error: Mittel der quadrierten Abweichungen.

compare -metric MSE baseline.png current.png null:

compare -metric PSNR <image1> <image2> null: — Peak Signal-to-Noise Ratio (höher = ähnlicher, inf = identisch).

compare -metric PSNR baseline.png current.png null:

compare -metric PHASH <image1> <image2> null: — Perceptual Hash: wahrnehmungsbasierte Differenz (0 = identisch).

compare -metric PHASH baseline.png current.png null:

compare -metric NCC <image1> <image2> null: — Normalized Cross-Correlation (1.0 = identisch).

compare -metric NCC baseline.png current.png null:

Darstellung des Differenzbilds

compare -highlight-color <color> <image1> <image2> <diff> — Legt die Farbe fest, mit der Unterschiede hervorgehoben werden.

compare -highlight-color blue original.png modified.png diff.png

compare -lowlight-color <color> <image1> <image2> <diff> — Legt die Farbe für unveränderte Bereiche fest.

compare -lowlight-color white original.png modified.png diff.png

compare -compose src <image1> <image2> <diff> — Zeigt nur die abweichenden Pixel (Rest transparent).

compare -compose src original.png modified.png diff.png

compare -fuzz <percent>% <image1> <image2> <diff> — Lässt eine Toleranz für nahezu übereinstimmende Pixel zu.

compare -fuzz 5% original.png modified.png diff.png

compare -fuzz <percent>% -metric AE <image1> <image2> null: — Zählt Unterschiede mit Farb-Toleranz.

compare -fuzz 2% -metric AE original.png modified.png null:

Teilbild-Suche

compare -subimage-search <small> <large> <diff> — Findet ein kleineres Bild innerhalb eines größeren Bildes.

compare -subimage-search icon.png screenshot.png match.png

compare -subimage-search -metric RMSE <small> <large> null: — Findet das Teilbild und meldet einen Ähnlichkeitswert.

compare -subimage-search -metric RMSE button.png screenshot.png null:

compare -subimage-search -dissimilarity-threshold <n> <small> <large> <diff> — Legt den Schwellenwert für die Teilbild-Suche fest (0.0 = exakt, 1.0 = beliebiger Treffer).

compare -subimage-search -dissimilarity-threshold 0.2 icon.png page.png match.png

CI/CD & Automatisierung

compare -metric AE -fuzz 1% <baseline> <current> diff.png && echo 'PASS' || echo 'FAIL' — Vergleich mit Exit-Code (0 = identisch, 1 = unterschiedlich).

compare -metric AE -fuzz 1% baseline.png screenshot.png diff.png && echo 'PASS' || echo 'FAIL'

DIFF=$(compare -metric AE <baseline> <current> null: 2>&1); [ "$DIFF" -lt <threshold> ] — Prüft, ob die Pixel-Differenz unter einem Schwellenwert liegt.

DIFF=$(compare -metric AE baseline.png current.png null: 2>&1); [ "$DIFF" -lt 100 ] && echo 'OK' || echo 'Too many changes'

compare -metric SSIM <image1> <image2> null: 2>&1 — Erfasst den SSIM-Wert (wird auf stderr ausgegeben, daher umleiten).

SSIM=$(compare -metric SSIM baseline.png current.png null: 2>&1); echo "Similarity: $SSIM"

for f in baseline/*.png; do compare -metric AE "$f" "current/$(basename $f)" "diff/$(basename $f)" 2>&1; done — Vergleicht alle Referenzbilder im Stapel gegen die aktuellen Versionen.

for f in baseline/*.png; do echo "$(basename $f): $(compare -metric AE "$f" "current/$(basename $f)" null: 2>&1)"; done

Fazit

compare ist das Werkzeug der Wahl, wenn du Bildunterschiede nicht nur sehen, sondern auch beziffern willst. Für die schnelle Sichtprüfung genügt das Differenzbild, für die Automatisierung greifst du zu -metric AE (gezählte Pixel) oder -metric RMSE/SSIM (Ähnlichkeitsmaße) und wertest Exit-Code sowie Stderr-Ausgabe aus. Plane -fuzz ein, um Rauschen und verlustbehaftete Kompression zu tolerieren, sonst meldet jeder JPEG-Artefakt einen Fehlschlag. Beachte, dass compare die angegebene Ausgabedatei ohne Rückfrage überschreibt, und nutze unter ImageMagick 7 vorzugsweise magick compare.

Verwandte Kommandos

  • identify – Format, Maße und Metadaten eines Bildes auslesen
  • composite – Bilder überlagern und zusammensetzen
  • convert – Bilder konvertieren, skalieren und bearbeiten