Rotate JPG and JPEG images by 90°, 180° or a fine angle online. Fix photo orientation for good; EXIF is kept.
JPG is the dominant format for everything that comes off a camera sensor: phone photos, DSLR exports, scanned documents, screenshots saved by older Windows tools, and basically every photo on the open web. Fixing orientation is the single most common JPG edit. The catch is that JPEG stores rotation in EXIF metadata as well as in the actual pixel order, and not every viewer respects EXIF — so a "rotated" photo that looks right in Photos.app can still appear sideways in an email client, an old CMS, or a printed contact sheet. Rotating the pixels themselves and rewriting EXIF gives a result that looks correct everywhere. Common reasons to rotate a JPG:
| Rotation | Lossless here? | Quality cost | What happens |
|---|---|---|---|
| 90 degrees clockwise | No | Tiny re-encode loss at a "Quality" of 85 or more | No interpolation; the pixels are re-encoded as a new JPG |
| 90 degrees counter-clockwise | No | Tiny re-encode loss at a "Quality" of 85 or more | No interpolation; the pixels are re-encoded as a new JPG |
| 180 degrees | No | Tiny re-encode loss at a "Quality" of 85 or more | No interpolation; the pixels are re-encoded as a new JPG |
| Custom angle (e.g., 1.5 degrees) | No | Tiny re-encode loss at a "Quality" of 85 or more | Resampled and re-encoded; corners white in a JPG unless you pick "Black" or "Auto-crop corners" |
Every rotation here, including 90, 180 and 270 degrees, saves a new JPG at the "Quality" you set (85 by default), so the loss is small and invisible at normal viewing sizes; raise "Quality" toward 100 to narrow it, or save as PNG for a lossless copy of the rotated pixels. A strictly lossless 90/180/270 turn of a JPG needs a command-line tool such as jpegtran.
| Angle | Source -> Result | Typical fix |
|---|---|---|
| 90 degrees CW | Sideways with subject's head on the left -> upright | iPhone / Pixel held in portrait, EXIF Orientation 6 ignored |
| 90 degrees CCW | Sideways with subject's head on the right -> upright | iPhone / Pixel held in portrait the other way, EXIF Orientation 8 ignored |
| 180 degrees | Upside-down -> right-side-up | Inverted flatbed scan, document fed wrong way |
| Custom 1-3 degrees | Tilted horizon -> level | Real estate, landscape, drone shots |
| Custom 45 degrees | Diagonal effect | Decorative / design overlays |
For mirroring (left-right reversal) instead of rotation, use Flip JPG. For a different format, see Rotate PNG, Rotate HEIC, or Rotate GIF.
Very slightly. Every rotation here, including 90 degrees, decodes the JPG and saves a new one at the "Quality" you set (85 by default); the editor does not transpose the already-encoded JPEG blocks, so the pixels are not bit-identical, though the difference is invisible at normal viewing sizes. Save as PNG for a lossless copy of the rotated pixels, or use a command-line tool such as jpegtran for a strictly lossless 90-degree turn (clean when width and height are multiples of 8, or 16 for chroma-subsampled JPGs). Custom-angle rotations (1.5 degrees, 45 degrees, etc.) also resample the pixels and have a tiny, generally invisible quality cost.
Phone cameras save the raw sensor pixels in their native landscape orientation, then write an EXIF Orientation tag (1-8) telling viewers how to display them. Photos.app, Google Photos, and modern browsers honor that tag and rotate on display. Many email clients, older CMS uploaders, slide decks, Discord on certain platforms, and printer drivers ignore EXIF and show the raw landscape pixels — which makes a portrait shot look sideways. Rotating the actual pixels with this tool and rewriting EXIF Orientation to 1 (normal) makes the photo display correctly everywhere.
Yes, when you save as JPG. The EXIF Orientation tag is reset to 1 (normal) because the pixels are now upright, and the rest of the metadata — capture timestamp, GPS coordinates, ISO / aperture / shutter, camera make and model, lens info — is copied across unchanged. If you'd rather strip EXIF entirely (privacy reasons), run the result through Compress JPG which has metadata-removal options.
Yes — drop up to 50 JPG files at once (a mixed batch works too). The rotation angle you set applies to every file in the batch; "Download all (.zip)" saves every rotated result in one ZIP, or use "Download one by one" to save them separately.
Rotating turns the image around its center by a specified angle (90, 180, 270, or any custom value) — text inside the image stays oriented relative to the rotation. Flipping mirrors the image across an axis: a horizontal flip swaps left and right (text becomes mirror-readable / backwards), a vertical flip swaps top and bottom. A 180-degree rotation produces the same visual result as applying both a horizontal and vertical flip together, but is not the same as either flip alone. For mirroring, use Flip JPG.
Yes. JPEG doesn't support transparency, so the empty triangular corners created by a non-orthogonal rotation are filled with solid white when you save as JPG (the editor says so before you download), or black if you pick "Black". If you need transparent corners, keep "Transparent" and save as PNG with "Save as" — the "Keep PNG" button does it in one click (JPG to PNG converts without rotating). To avoid the corners altogether, pick "Auto-crop corners", or crop the rotated result tightly with Crop JPG.
An exact 90 / 180 / 270 rotation only moves pixels to new positions, with no math per pixel beyond an index change. A custom angle (anything that isn't a multiple of 90) also has to resample every pixel into its rotated position. Here both kinds are decoded and re-encoded as a new JPG, so the resampling is extra work on top of the same decode and encode.
JFIF (.jfif) is a container variant of standard JPEG and is fully supported — drop in.jfif files alongside.jpg /.jpeg with no conversion needed. JPEG-2000 (.jp2 /.j2k) is a different format with its own codec; convert those to standard JPG with a tool that reads JPEG-2000 first, then rotate.
Not within a single batch — the rotation angle you set applies to every file in that batch. The practical fix: drop just the portrait photos together as one batch (up to 50), rotate them, then start a new batch for the landscape ones — two passes total rather than one per photo.