# jpegtran — JPEG-Dateien verlustfrei transformieren und optimieren

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

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

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

## Optimierung

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

```bash
jpegtran -optimize photo.jpg > optimized.jpg
```

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

```bash
jpegtran -progressive photo.jpg > progressive.jpg
```

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

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

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

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

```bash
jpegtran -arithmetic photo.jpg > arithmetic.jpg
```

## Rotation (verlustfrei)

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

```bash
jpegtran -rotate 90 photo.jpg > rotated.jpg
```

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

```bash
jpegtran -rotate 180 photo.jpg > rotated.jpg
```

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

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

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

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

## Spiegeln (verlustfrei)

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

```bash
jpegtran -flip horizontal photo.jpg > mirrored.jpg
```

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

```bash
jpegtran -flip vertical photo.jpg > flipped.jpg
```

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

```bash
jpegtran -transpose photo.jpg > transposed.jpg
```

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

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

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

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

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

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

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

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

```bash
jpegtran -copy all photo.jpg > output.jpg
```

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

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

```bash
jpegtran -grayscale photo.jpg > grayscale.jpg
```

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

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

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

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

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

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

<!-- PROSE:outro -->
## 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)](https://de.wikipedia.org/wiki/Libjpeg) – Hintergrund zur JPEG-Bibliothek, zu der jpegtran gehört
- [jpegtran(1) – Manpage](https://manpages.debian.org/bookworm/libjpeg-turbo-progs/jpegtran.1.en.html) – vollständige Referenz aller Kommandozeilen-Optionen
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [convert](https://www.jpkc.com/db/cheatsheets/images-media/convert/) – Bilder konvertieren und bearbeiten mit ImageMagick
- [optipng](https://www.jpkc.com/db/cheatsheets/images-media/optipng/) – PNG-Dateien verlustfrei optimieren
- [mogrify](https://www.jpkc.com/db/cheatsheets/images-media/mogrify/) – Bilder stapelweise in-place transformieren (ImageMagick)

