How to use it
- Drop one image (or several that need the same fix).
- Use the 90° buttons, type an angle, and toggle the flips until the preview looks right.
- For tilted angles choose a transparent or coloured background; pick the output format and quality.
- Press Apply and download the result or the ZIP.
Example
A 4,000 × 3,000 px landscape rotated 90° clockwise becomes 3,000 × 4,000 px with identical pixels. Rotated by 5° instead, the bounding box grows to 4,000·cos5° + 3,000·sin5° ≈ 4,246 px by 4,000·sin5° + 3,000·cos5° ≈ 3,337 px, with small triangles of background in the corners – crop them afterwards with the Image Cropper.
How rotation is applied
The image is decoded with createImageBitmap(file, { imageOrientation: 'from-image' }), a canvas of the rotated bounding-box size is created, the context is translated to its centre, rotated with ctx.rotate()and scaled by −1 on the mirrored axes, then the bitmap is drawn centred. The output is encoded with canvas.toBlob(), which drops EXIF/GPS metadata and resets any orientation tag.
W′ = |w·cos θ| + |h·sin θ|
H′ = |w·sin θ| + |h·cos θ|For angles that are not multiples of 90° the pixels are resampled (bilinear, high quality), so a tilted JPEG loses a little sharpness and is re-compressed at the chosen quality. Outputs are capped at about 40 megapixels; iOS Safari has a lower canvas limit. HEIC input is refused because browsers cannot decode it on a canvas.
Sources: MDN – CanvasRenderingContext2D.rotate(), MDN – createImageBitmap() options.
Questions
- Why does my phone photo look rotated before I do anything?
- Phones store the sensor image sideways and add an EXIF orientation tag. This tool applies that tag first, so the preview shows the photo as your phone shows it; the saved file has upright pixels and no orientation tag.
- Is rotating a JPEG by 90° lossless?
- The geometry is exact, but the file is re-encoded, so there is one generation of JPEG compression. At quality 92 the difference is not visible; use PNG output if you need bit-exact pixels.
- Can I rotate several photos by different angles?
- One transform applies to the whole batch. Run the tool once per angle, or load the photos that need the same correction together.