jpegtran — JPEG-Dateien verlustfrei transformieren und optimieren

Verlustfreie JPEG-Transformationen mit jpegtran: rotieren, spiegeln, zuschneiden und optimieren – ohne Neukodierung und ohne Qualitätsverlust.

jpegtran transformiert JPEG-Bilder rein verlustfrei – ganz ohne erneutes Dekodieren und Kodieren. Statt das Bild neu zu rendern, ordnet das Werkzeug die bereits komprimierten DCT-Blöcke direkt um: Du drehst, spiegelst, beschneidest oder optimierst eine Datei, ohne ein einziges zusätzliches Qualitätsbit zu verlieren. Damit ist jpegtran die erste Wahl, wenn du Fotos fürs Web verschlanken oder ihre Ausrichtung korrigieren willst, ohne sichtbare Artefakte einzuhandeln.

Optimierung

jpegtran -optimize <input.jpg> > <output.jpg> — Optimiert die Huffman-Tabellen (kleinere Datei, kein Qualitätsverlust).

jpegtran -optimize photo.jpg > optimized.jpg

jpegtran -progressive <input.jpg> > <output.jpg> — Wandelt in ein progressives JPEG um (web-freundlich, lädt schrittweise).

jpegtran -progressive photo.jpg > progressive.jpg

jpegtran -optimize -progressive <input.jpg> > <output.jpg> — Optimiert und macht progressiv (beste verlustfreie Kompression).

jpegtran -optimize -progressive photo.jpg > optimized.jpg

jpegtran -copy none -optimize -progressive <input.jpg> > <output.jpg> — Optimiert, macht progressiv und entfernt alle Metadaten.

jpegtran -copy none -optimize -progressive photo.jpg > clean.jpg

jpegtran -arithmetic <input.jpg> > <output.jpg> — Nutzt arithmetische Kodierung (kleinere Dateien, eingeschränkte Browser-Unterstützung).

jpegtran -arithmetic photo.jpg > arithmetic.jpg

Rotation (verlustfrei)

jpegtran -rotate 90 <input.jpg> > <output.jpg> — Dreht um 90 Grad im Uhrzeigersinn (verlustfrei).

jpegtran -rotate 90 photo.jpg > rotated.jpg

jpegtran -rotate 180 <input.jpg> > <output.jpg> — Dreht um 180 Grad (verlustfrei).

jpegtran -rotate 180 photo.jpg > rotated.jpg

jpegtran -rotate 270 <input.jpg> > <output.jpg> — Dreht um 270 Grad / 90 Grad gegen den Uhrzeigersinn (verlustfrei).

jpegtran -rotate 270 photo.jpg > rotated.jpg

jpegtran -rotate 90 -trim <input.jpg> > <output.jpg> — Dreht und schneidet unvollständige MCU-Blöcke am Rand weg (vermeidet grüne Randartefakte).

jpegtran -rotate 90 -trim photo.jpg > rotated.jpg

jpegtran -rotate 90 -perfect <input.jpg> > <output.jpg> — Dreht nur, wenn es perfekt möglich ist (bricht ab, wenn die Maße nicht MCU-ausgerichtet sind).

jpegtran -rotate 90 -perfect photo.jpg > rotated.jpg

Spiegeln (verlustfrei)

jpegtran -flip horizontal <input.jpg> > <output.jpg> — Spiegelt horizontal (verlustfrei).

jpegtran -flip horizontal photo.jpg > mirrored.jpg

jpegtran -flip vertical <input.jpg> > <output.jpg> — Spiegelt vertikal (verlustfrei).

jpegtran -flip vertical photo.jpg > flipped.jpg

jpegtran -transpose <input.jpg> > <output.jpg> — Transponiert (spiegelt an der Diagonale von oben-links nach unten-rechts).

jpegtran -transpose photo.jpg > transposed.jpg

jpegtran -transverse <input.jpg> > <output.jpg> — Transversale Spiegelung (an der Diagonale von oben-rechts nach unten-links).

jpegtran -transverse photo.jpg > transversed.jpg

Zuschneiden (verlustfrei)

jpegtran -crop <width>x<height>+<x>+<y> <input.jpg> > <output.jpg> — Schneidet einen Bereich aus (Koordinaten müssen an MCU-Grenzen ausgerichtet sein, meist 8 oder 16 Pixel).

jpegtran -crop 640x480+0+0 photo.jpg > cropped.jpg

jpegtran -crop <width>x<height> <input.jpg> > <output.jpg> — Schneidet von der oberen linken Ecke aus.

jpegtran -crop 800x600 photo.jpg > cropped.jpg

jpegtran -crop <width>x<height>+<x>+<y> -trim <input.jpg> > <output.jpg> — Schneidet zu und trimmt auf MCU-Grenzen.

jpegtran -crop 500x400+100+50 -trim photo.jpg > cropped.jpg

jpegtran -drop +<x>+<y> <overlay.jpg> <input.jpg> > <output.jpg> — Setzt (überlagert) ein anderes JPEG an einer Position ein (verlustfreies Einfügen).

jpegtran -drop +0+0 watermark.jpg photo.jpg > watermarked.jpg

Metadaten steuern

jpegtran -copy none <input.jpg> > <output.jpg> — Entfernt alle Metadaten (EXIF, Kommentare, ICC-Profile).

jpegtran -copy none photo.jpg > stripped.jpg

jpegtran -copy comments <input.jpg> > <output.jpg> — Behält nur Kommentar-Marker (jpegtrans Standardverhalten), entfernt EXIF und andere Marker.

jpegtran -copy comments photo.jpg > clean.jpg

jpegtran -copy all <input.jpg> > <output.jpg> — Behält alle Zusatz-Marker, inklusive EXIF, ICC-Profil und Thumbnails.

jpegtran -copy all photo.jpg > output.jpg

jpegtran -copy icc <input.jpg> > <output.jpg> — Behält nur das ICC-Farbprofil, entfernt EXIF und Kommentare.

jpegtran -copy icc photo.jpg > color-preserved.jpg

Graustufen & Farbe

jpegtran -grayscale <input.jpg> > <output.jpg> — Wandelt in Graustufen um (verlustfrei, entfernt die Chroma-Kanäle).

jpegtran -grayscale photo.jpg > grayscale.jpg

jpegtran -grayscale -optimize <input.jpg> > <output.jpg> — Wandelt in Graustufen um und optimiert (deutliche Größenreduktion).

jpegtran -grayscale -optimize photo.jpg > bw-optimized.jpg

Typische Muster

for f in *.jpg; do jpegtran -copy none -optimize -progressive "$f" > "opt-$f"; done — Optimiert stapelweise alle JPEGs in einem Verzeichnis.

for f in *.jpg; do jpegtran -copy none -optimize -progressive "$f" > "opt-$f"; done

find . -name '*.jpg' -exec sh -c 'jpegtran -copy none -optimize -progressive "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {} \; — Optimiert rekursiv alle JPEGs in-place.

find . -name '*.jpg' -exec sh -c 'jpegtran -copy none -optimize -progressive "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {} \;

jpegtran -rotate 90 -copy all -optimize photo.jpg > rotated.jpg — Dreht verlustfrei und behält dabei alle Metadaten, während optimiert wird.

jpegtran -rotate 90 -copy all -optimize photo.jpg > rotated.jpg

jpegtran -copy none -optimize -progressive -outfile <output.jpg> <input.jpg> — Nutzt die Option -outfile statt der stdout-Umleitung.

jpegtran -copy none -optimize -progressive -outfile optimized.jpg photo.jpg

Fazit

jpegtran ist genau dann unschlagbar, wenn jedes Qualitätsbit zählt: Optimieren, Drehen, Spiegeln und Zuschneiden laufen rein verlustfrei direkt auf den komprimierten Daten. Behalte aber zwei Dinge im Blick. Erstens entfernt -copy none sämtliche Metadaten – also auch die EXIF-Orientierung und das eingebettete ICC-Farbprofil; gerade bei Smartphone-Fotos kann das Bild dadurch falsch herum oder farblich verschoben erscheinen. Mit -copy all bleiben diese Marker erhalten (der Default -copy comments behält nur Kommentare). Zweitens funktioniert die verlustfreie Rotation nur dann sauber, wenn die Bildmaße durch die MCU-Größe (8 bzw. 16 Pixel) teilbar sind – andernfalls helfen -perfect (bricht lieber ab, als unsauber zu drehen) oder -trim (schneidet die unvollständigen Randblöcke weg). Und nicht vergessen: jpegtran arbeitet nicht in-place, sondern gibt das Ergebnis nach stdout oder via -outfile aus – leite es auf eine andere Datei um, sonst überschreibst du versehentlich dein Original.

Verwandte Kommandos

  • convert – Bilder konvertieren und bearbeiten mit ImageMagick
  • optipng – PNG-Dateien verlustfrei optimieren
  • mogrify – Bilder stapelweise in-place transformieren (ImageMagick)