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:
| Aufruf | Ergebnis |
|---|---|
magick in.tif -compress LZW out.tif | Predictor 2 |
magick in.tif -compress Zip out.tif | Predictor 2 |
tiffcp -c lzw in.tif out.tif | kein Predictor-Tag |
tiffcp -c lzw:2 in.tif out.tif | Predictor 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.-stripauf 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