ImageMagick ist seit 1987 die Schweizer Taschenmesser für Bildverarbeitung auf der Kommandozeile. Es liest und schreibt mehr als 200 Bildformate (TIFF, JPEG, PNG, PDF, WebP, HEIC, JP2, RAW, …), beherrscht Resize, Crop, Konversion, Farbprofil-Konvertierung, OCR-Vorbereitung, und lässt sich gut in Pipelines und Batch-Skripte einbauen.

v6 vs. v7

Seit Version 7 (2016) ist das primäre Kommando magick; convert, mogrify, identify etc. existieren weiterhin als Shortcuts. Auf älteren Systemen ist convert das Hauptkommando — mit gewissen Argument-Reihenfolge-Unterschieden zu magick.

magick --version          # zeigt v7-Stil
convert --version         # zeigt v6-Stil oder ein v7-Symlink

In den folgenden Beispielen verwenden wir magick; auf v6-Systemen funktioniert convert analog.

Format-Konversion

magick eingabe.tif ausgabe.jpg
magick scan.pdf seite-%02d.png      # PDF-Seiten in einzelne PNGs
magick foto.heic foto.jpg           # iPhone-Fotos

Resize

magick original.tif -resize 1600x ausgabe.jpg          # max. 1600 px Breite, Höhe proportional
magick original.tif -resize x800 ausgabe.jpg           # max. 800 px Höhe
magick original.tif -resize 800x600 ausgabe.jpg        # in eine 800×600-Box einpassen
magick original.tif -resize 800x600^ -gravity center -extent 800x600 ausgabe.jpg   # füllen + zentriert beschneiden
magick original.tif -resize 50% ausgabe.jpg            # 50 % der Originalgrösse

JPEG-Qualität und Strip

magick scan.tif -quality 88 -strip ausgabe.jpg
# -quality: 1–100 (90+ kaum sichtbarer Unterschied, 75–88 typischer Web-Wert)
# -strip:   entfernt EXIF, Farbprofile, Thumbnails (kleinere Datei)

Crop

magick foto.jpg -crop 800x600+100+50 zugeschnitten.jpg
# 800×600-Ausschnitt, beginnend bei (100,50) von links/oben
magick foto.jpg -gravity center -crop 1024x1024+0+0 +repage zentriert.jpg

Rotation und Spiegelung

magick foto.jpg -rotate 90 gedreht.jpg
magick foto.jpg -auto-orient korrigiert.jpg     # rotiert anhand des EXIF-Orientation-Tags
magick foto.jpg -flip   vertikal_gespiegelt.jpg
magick foto.jpg -flop   horizontal_gespiegelt.jpg

Farbprofile

magick eingabe.tif -profile sRGB.icc ausgabe.jpg     # Profil zuweisen / konvertieren
magick eingabe.tif -strip ausgabe.jpg                # Profil entfernen (vorsichtig!)

Profile findet man in der ImageMagick-Distribution oder bei der International Color Consortium (ICC).

identify — Metadaten ansehen

identify foto.jpg
# foto.jpg JPEG 4032x3024 4032x3024+0+0 8-bit sRGB 2.4MB

identify -verbose foto.jpg | less        # vollständige Metadaten
identify -format "%w %h %m %b\n" foto.jpg

TIFF-Kompression und Predictor

TIFF speichert das Kompressionsverfahren in Tag 259, den Predictor in Tag 317. Beides sind getrennte Schalter, und für Fotografien entscheidet der Predictor über den grössten Teil des Ergebnisses. -define tiff:predictor=2 schaltet die horizontale Differenzbildung ein; die Rechnung ist ganzzahlig und umkehrbar.

magick in.tif -compress None                          unkomprimiert.tif
magick in.tif -compress LZW -define tiff:predictor=1  lzw-ohne.tif   # ≈ 74 %
magick in.tif -compress LZW -define tiff:predictor=2  lzw-mit.tif    # ≈ 42 %
magick in.tif -compress Zip -define tiff:predictor=2  zip-mit.tif    # ≈ 39 %
magick in.tif -quality 100                            lossless.jp2   # ≈ 26 %

Prozentwerte relativ zur unkomprimierten Datei, gemessen an zwanzig Fotoscans (RGB, 8 Bit pro Kanal).

ImageMagick 7 setzt den Predictor von sich aus auf 2, sowohl bei LZW als auch bei Zip. -define tiff:predictor=2 ist dort also redundant; abschalten liesse er sich nur mit predictor=1, was die Datei fast verdoppelt. Verlassen sollte man sich darauf trotzdem nicht, denn andere Werkzeuge halten es anders. tiffcp aus libtiff schreibt ohne ausdrückliche Angabe gar kein Predictor-Tag:

AufrufErgebnis
magick in.tif -compress LZW out.tifPredictor 2
magick in.tif -compress Zip out.tifPredictor 2
tiffcp -c lzw in.tif out.tifkein Predictor-Tag
tiffcp -c lzw:2 in.tif out.tifPredictor 2

Deshalb nach der Konversion nachsehen statt annehmen:

tiffinfo datei.tif | grep -i predictor
``` Zur Einordnung: Baseline-TIFF 6.0 kennt im Kompressionsfeld nur «keine
Kompression», CCITT-Lauflängencodierung und PackBits. LZW und der Predictor stehen beide
im Erweiterungsteil der Spezifikation, Deflate/Zip kommt in TIFF 6.0 gar nicht vor. Jede
verlustfreie Kompression verlässt also den Baseline-Kern, was in manchen
Formatempfehlungen einen Unterschied macht. Details im Beitrag
[Archivmaster für Bilder: Formate und Kompression](/beitraege/archivmaster-bilder-formate-kompression/).

Was in einer vorliegenden Datei tatsächlich steckt:

```sh
identify -format '%C\n' datei.tif      # Kompressionsverfahren
tiffinfo datei.tif | grep -i 'compress\|predictor'

Verlustfreiheit nachweisen

%# liefert eine kryptografische Prüfsumme über die entpackten Pixeldaten — nicht über die Datei. Sie ist damit unabhängig davon, wie das Bild verpackt ist, und der belastbare Nachweis dafür, dass eine Umkompression nichts verändert hat:

identify -quiet -format '%#' original.tif
identify -quiet -format '%#' ergebnis.tif

Beide Aufrufe müssen dieselbe Zeichenkette ausgeben. Die Dateigrösse sagt darüber nichts aus. Für einen ganzen Bestand:

find quelle -name '*.tif' -print0 | while IFS= read -r -d '' f; do
  a=$(identify -quiet -format '%#' "$f")
  b=$(identify -quiet -format '%#' "ziel/${f#quelle/}")
  [ "$a" = "$b" ] && echo "OK	$f" || echo "ABWEICHUNG	$f"
done

Der Aufwand steigt linear und besteht allein aus Rechenzeit; eine Stichprobe genügt hier nicht, weil ein Fehler einzelne Dateien trifft und nicht den Lauf.

mogrify — In-place-Stapel

mogrify arbeitet wie magick, schreibt aber Ergebnisse direkt in die Quelldatei (oder mit -path in ein Zielverzeichnis):

# alle TIFFs in einem Verzeichnis als JPEG-Kopien erzeugen
mogrify -path ./jpeg -format jpg -quality 88 -strip *.tif

# alle PNGs auf 1600 px Breite verkleinern (in-place!)
mogrify -resize 1600x *.png

Mehrseitige TIFFs / GIFs

# Mehrseitiges TIFF in einzelne Bilder
magick scan.tif scan-%02d.tif

# Animation aus Einzelbildern
magick -delay 20 -loop 0 frame-*.png animation.gif

# Erste Seite eines mehrseitigen Dokuments extrahieren
magick scan.pdf[0] cover.png

Composite und Watermark

magick foto.jpg watermark.png -gravity southeast -geometry +20+20 -composite mit-watermark.jpg

OCR-Vorbereitung

Vor Tesseract & Co. lohnt sich oft ein wenig Aufbereitung:

magick scan.tif -density 300 -colorspace Gray -threshold 50% scan-bw.tif
magick scan.tif -deskew 40% gerade.tif      # Schrägstellung korrigieren

Sicherheit (PDFs)

ImageMagick verarbeitet PDFs über Ghostscript. Standardmässig sind PS/PDF/EPS in /etc/ImageMagick-7/policy.xml aus Sicherheitsgründen oft deaktiviert. Wenn magick scan.pdf … „not authorized” sagt, muss diese Policy angepasst werden — bewusst und nicht für nicht-vertrauenswürdige PDFs.

Performance-Tipps

  • -define jpeg:size=… beim Lesen — beschleunigt grosse JPEGs.
  • -limit memory 2GiB -limit map 4GiB — Limits anpassen für Batch-Verarbeitung.
  • -strip auf Output reduziert Dateigrösse drastisch.
  • Statt mehrerer aufeinanderfolgender magick-Aufrufe alle Operationen in einem Aufruf chainen — spart Reads/Writes.

Verhältnis zu anderen Spickzetteln

  • Datenmengen-Rechner — Speicherbedarf vorab schätzen, mit den oben gemessenen Kompressionsfaktoren
  • Memoriav-Empfehlungen — welche TIFF-Kompression für Foto-Archivmaster in der Schweiz zugelassen ist
  • ExifTool — Metadaten lesen und schreiben, ergänzend zu identify
  • FFmpeg — dasselbe für Audio und Video