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.jpgjpegtran -progressive <input.jpg> > <output.jpg> — Wandelt in ein progressives JPEG um (web-freundlich, lädt schrittweise).
jpegtran -progressive photo.jpg > progressive.jpgjpegtran -optimize -progressive <input.jpg> > <output.jpg> — Optimiert und macht progressiv (beste verlustfreie Kompression).
jpegtran -optimize -progressive photo.jpg > optimized.jpgjpegtran -copy none -optimize -progressive <input.jpg> > <output.jpg> — Optimiert, macht progressiv und entfernt alle Metadaten.
jpegtran -copy none -optimize -progressive photo.jpg > clean.jpgjpegtran -arithmetic <input.jpg> > <output.jpg> — Nutzt arithmetische Kodierung (kleinere Dateien, eingeschränkte Browser-Unterstützung).
jpegtran -arithmetic photo.jpg > arithmetic.jpgRotation (verlustfrei)
jpegtran -rotate 90 <input.jpg> > <output.jpg> — Dreht um 90 Grad im Uhrzeigersinn (verlustfrei).
jpegtran -rotate 90 photo.jpg > rotated.jpgjpegtran -rotate 180 <input.jpg> > <output.jpg> — Dreht um 180 Grad (verlustfrei).
jpegtran -rotate 180 photo.jpg > rotated.jpgjpegtran -rotate 270 <input.jpg> > <output.jpg> — Dreht um 270 Grad / 90 Grad gegen den Uhrzeigersinn (verlustfrei).
jpegtran -rotate 270 photo.jpg > rotated.jpgjpegtran -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.jpgjpegtran -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.jpgSpiegeln (verlustfrei)
jpegtran -flip horizontal <input.jpg> > <output.jpg> — Spiegelt horizontal (verlustfrei).
jpegtran -flip horizontal photo.jpg > mirrored.jpgjpegtran -flip vertical <input.jpg> > <output.jpg> — Spiegelt vertikal (verlustfrei).
jpegtran -flip vertical photo.jpg > flipped.jpgjpegtran -transpose <input.jpg> > <output.jpg> — Transponiert (spiegelt an der Diagonale von oben-links nach unten-rechts).
jpegtran -transpose photo.jpg > transposed.jpgjpegtran -transverse <input.jpg> > <output.jpg> — Transversale Spiegelung (an der Diagonale von oben-rechts nach unten-links).
jpegtran -transverse photo.jpg > transversed.jpgZuschneiden (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.jpgjpegtran -crop <width>x<height> <input.jpg> > <output.jpg> — Schneidet von der oberen linken Ecke aus.
jpegtran -crop 800x600 photo.jpg > cropped.jpgjpegtran -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.jpgjpegtran -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.jpgMetadaten steuern
jpegtran -copy none <input.jpg> > <output.jpg> — Entfernt alle Metadaten (EXIF, Kommentare, ICC-Profile).
jpegtran -copy none photo.jpg > stripped.jpgjpegtran -copy comments <input.jpg> > <output.jpg> — Behält nur Kommentar-Marker (jpegtrans Standardverhalten), entfernt EXIF und andere Marker.
jpegtran -copy comments photo.jpg > clean.jpgjpegtran -copy all <input.jpg> > <output.jpg> — Behält alle Zusatz-Marker, inklusive EXIF, ICC-Profil und Thumbnails.
jpegtran -copy all photo.jpg > output.jpgjpegtran -copy icc <input.jpg> > <output.jpg> — Behält nur das ICC-Farbprofil, entfernt EXIF und Kommentare.
jpegtran -copy icc photo.jpg > color-preserved.jpgGraustufen & Farbe
jpegtran -grayscale <input.jpg> > <output.jpg> — Wandelt in Graustufen um (verlustfrei, entfernt die Chroma-Kanäle).
jpegtran -grayscale photo.jpg > grayscale.jpgjpegtran -grayscale -optimize <input.jpg> > <output.jpg> — Wandelt in Graustufen um und optimiert (deutliche Größenreduktion).
jpegtran -grayscale -optimize photo.jpg > bw-optimized.jpgTypische 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"; donefind . -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.jpgjpegtran -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.
Weiterführende Links
- Libjpeg (Wikipedia) – Hintergrund zur JPEG-Bibliothek, zu der jpegtran gehört
- jpegtran(1) – Manpage – vollständige Referenz aller Kommandozeilen-Optionen