# 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.

Source: https://www.jpkc.com/db/cheatsheets/images-media/compare/

<!-- PROSE:intro -->
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.
<!-- PROSE:intro:end -->

## Grundlegender Vergleich

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

```bash
compare original.png modified.png diff.png
```

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

```bash
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.

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

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

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

## Vergleichsmetriken

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

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

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

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

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

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

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

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

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

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

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

```bash
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.

```bash
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.

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

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

```bash
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.

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

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

```bash
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.

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

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

```bash
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).

```bash
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).

```bash
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.

```bash
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).

```bash
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.

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

<!-- PROSE:outro -->
## 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`.

## Weiterführende Links

- [ImageMagick: compare](https://imagemagick.org/script/compare.php) – offizielle Referenz aller Optionen und Metriken von compare
- [ImageMagick auf Wikipedia](https://de.wikipedia.org/wiki/ImageMagick) – deutschsprachiger Überblick zur Bildbearbeitungs-Suite
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [identify](https://www.jpkc.com/db/cheatsheets/images-media/identify/) – Format, Maße und Metadaten eines Bildes auslesen
- [composite](https://www.jpkc.com/db/cheatsheets/images-media/composite/) – Bilder überlagern und zusammensetzen
- [convert](https://www.jpkc.com/db/cheatsheets/images-media/convert/) – Bilder konvertieren, skalieren und bearbeiten

