Skip to the tool
CALCPARK

Image Rotator

Rotate photos by 90, 180, 270 or any angle and flip them horizontally or vertically with a live preview. Pick the background for tilted images; batch rotate with ZIP.

Files stay on your device
Loading the tool…

How to use it

  1. Drop one image (or several that need the same fix).
  2. Use the 90° buttons, type an angle, and toggle the flips until the preview looks right.
  3. For tilted angles choose a transparent or coloured background; pick the output format and quality.
  4. 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.