Toolkit
All tools
Rotate and flip · Free

Image Rotator & Flipper

Turn a picture by a quarter, a half, or any angle down to a tenth of a degree, mirror it either way, and level a crooked horizon against a grid. Quarter turns move pixels without resampling them, and every angle in between shows you both the expanded canvas and the largest crop that fits inside it.

Rotated in your browser · No upload, no account

Drop an image here

PNG, JPEG, WebP, GIF, AVIF, BMP, and SVG are recognised from their own leading bytes rather than the file name, so a renamed screenshot still loads.

25 MB maximum · 40 MP source · 8,192 px output · never uploaded

How it works

A rotation is one matrix, and a canvas that has to be a rectangle.

Rotating an image is not an effect applied to a photograph. It is a coordinate change: every source pixel is mapped through a single matrix onto a new canvas, and the only questions worth answering are how large that canvas has to be and what fills the parts of it the picture does not reach. At a quarter turn the answer is easy, because the matrix holds nothing but zeros and ones and the picture still fills the rectangle exactly. At any other angle the tilted picture and the upright canvas disagree, and this page solves both versions of that disagreement in closed form: the bounding box that contains everything, and the largest upright rectangle contained by everything. Flips join the same matrix rather than becoming a second pass, which is why the order they are applied in is fixed and stated instead of left to whichever button you pressed last.

  1. 01

    Load one picture

    Drop a file on the panel or choose one. The format is read from the file's own leading bytes, so a screenshot somebody renamed still loads, and the picture is decoded here in the tab. Nothing is sent anywhere at any point.

  2. 02

    Turn it, mirror it, or level it

    Five buttons cover the quarter turns, the half turn, and both mirrors, on the keyboard as well as the screen. For anything in between, drag the angle to a tenth of a degree, or use the straighten slider and lay the horizon along the grid line on the preview.

  3. 03

    Decide what happens to the corners, then export

    A tilted picture no longer fills a rectangle. Expand to fit keeps every pixel and fills the four wedges with a colour you choose, crop to fill takes the largest rectangle that sits entirely inside the picture, and both sizes are printed before you commit to either.

Built for sideways photos and crooked horizons

Exact quarter turns, honest angles, and no upload.

Quarter turns that move pixels rather than resample them

At 90, 180, and 270 degrees the sine and cosine come from an exact table rather than from a floating-point library, so a 4000 by 3000 photo becomes exactly 3000 by 4000 and every pixel lands whole in a new position. Smoothing is switched off for those angles, which makes the export a rearrangement of the file you loaded rather than an interpolation of it.

Straightening at a tenth of a degree, against a real grid

A crooked horizon is almost never out by a whole degree, so the straighten control works in steps of 0.1 across 15 degrees either way and leaves the quarter turns alone. The preview carries thirds plus a centre rule in the accent colour to lay the horizon against, and the overlay is drawn on top of the canvas so it can never reach the file.

Both answers to the corner problem, each computed exactly

Expand to fit reports the bounding box of the tilted picture and the share of it that is empty. Crop to fill solves for the largest upright rectangle that lies entirely inside the tilted picture, prints its exact dimensions, and says how much of the original it throws away. Neither is a guess, and you can read both numbers before choosing.

One transform, however many buttons you press

The page holds a description of the transform, not a working copy of the image, and redraws from the original file every time. Twenty presses of the rotate button therefore cost exactly what one press costs. Repeated re-encoding is what actually degrades a JPEG, and there is none of it here until you export.

Numbers that describe the file, not the preview

The preview is scaled to fit the panel and says what percentage it is showing. Beside it sit the true output dimensions, the megapixel count, the applied chain in plain language, and a file-size estimate measured by encoding a probe with the codec and quality you selected.

Caps that are stated rather than discovered

25 MB per file, 40 megapixels of source, 8,192 pixels on the longest output side, and 40 megapixels of output. Anything that would exceed them is refused with the number that broke it, and a canvas large enough to trouble a phone gets a warning while it is still legal.

Rotating and flipping

Quality, orientation tags, corners, and metadata.

How do I rotate a photo 90 degrees without losing quality?+

Use one of the quarter-turn buttons and export as PNG or WebP. A turn of 90, 180, or 270 degrees maps every source pixel exactly onto an output pixel, so the operation is a rearrangement rather than a calculation: no colour is averaged with its neighbour and no edge softens. This page computes those three angles from an exact table instead of from a sine function, which is what keeps a 4000 by 3000 photo landing on exactly 3000 by 4000 rather than 3001 by 4000 with a soft edge. The only remaining loss is in the encoder, so choose a lossless format if the result is going to be edited again, and keep JPEG quality at 92 or above if it is not.

Why does my photo appear sideways in one app and upright in another?+

Because the camera almost certainly wrote the picture in the sensor's own orientation and added an EXIF orientation tag telling software to turn it. Modern browsers, phones, and photo apps read that tag; a surprising number of older viewers, upload forms, and printing pipelines do not, which is why the same file looks right in one place and rotated in another. Loading it here settles the argument: the browser applies the orientation tag before anything is drawn, so what you see is the upright version, and the export bakes that rotation into real pixels with no tag left to ignore. That alone fixes a file that keeps flipping on upload, even if you make no other change.

What happens to the corners when I rotate by a few degrees?+

The picture stops being a rectangle in the canvas's own axes, so something has to give and you get to choose which. Expand to fit grows the canvas to the bounding box of the tilted picture: nothing is lost, but four triangular wedges around the edge have no picture in them and are filled with whatever colour you pick, or left transparent. Crop to fill goes the other way and shrinks the canvas to the largest upright rectangle that lies entirely inside the tilted picture, so there is nothing to fill and no background at all, at the cost of the outer edges. The page shows both sizes at once, so you can see exactly what each choice costs before you take it.

How do I straighten a crooked horizon?+

Turn on the alignment grid, then drag the straighten slider until the horizon runs parallel to the centre rule. Almost every crooked photo is out by less than three degrees, which is why the straighten control covers 15 degrees each way in steps of a tenth rather than the whole circle: the resolution is where the problem actually lives. Straightening only edits the tilt and never the quarter turns, so a photo you have already turned upright stays upright while you level it. Finish with crop to fill, which is the conventional answer for a straightened photo because it removes the empty wedges the tilt opened up.

Does the order of a rotation and a flip matter?+

Yes, and it is the thing most rotation tools get quietly wrong. Rotating then mirroring is not the same as mirroring then rotating: turn a picture 90 degrees right and then flip it horizontally, and you land somewhere different from flipping first and then turning. This page fixes one order, mirror first in the picture's own axes and then rotate, and rewrites whatever sequence you pressed into that form. The chain readout under the preview always shows the canonical version, which is why pressing rotate right and then flip horizontal is reported as a flip followed by a 90 degree left turn. It is the same result on screen, described in a way that stays consistent. Flipping both ways is a special case worth knowing: two mirrors at right angles are exactly a half turn, so the chain collapses them into one.

Will this remove the EXIF data and the GPS location?+

Yes, completely, and there is no setting to keep it. The export is drawn onto a fresh canvas and encoded from scratch, and a canvas has nowhere to store the metadata that came with the original: no camera model, no lens, no shutter speed or aperture, no timestamp, and no GPS coordinates. Embedded colour profiles go with them, so a photo tagged Display P3 comes back untagged and is treated as sRGB by anything that opens it, which can shift saturated colours slightly. Orientation is the one piece of metadata whose effect survives, because the browser applies it before drawing and the result becomes real pixels. If you need the metadata preserved, this is the wrong tool. If you were trying to strip it, rotating does that as a side effect.

Does rotating a JPEG over and over degrade it?+

It would in a tool that re-encodes after every button press, and that is the usual design. This page never does: the state it keeps is a description of the transform, one angle and one mirror flag, and every preview is drawn from the file you originally loaded. Pressing rotate twenty times composes twenty operations into a single matrix and draws once, so the result is identical to pressing it once with the same net angle. Only the download encodes, and it encodes once. There is still a real distinction to know about: a quarter turn moves pixels without touching their values, while any other angle interpolates each output pixel from several source pixels, which softens fine text and hard edges very slightly however good the filter is.

Why is the exported file larger than the one I loaded?+

Usually for one of three reasons that stack. Expand to fit adds pixels, because the bounding box of a tilted rectangle is bigger than the rectangle: at 45 degrees a square grows by about 41 percent on each side and doubles in area. The export is also a fresh encode, and a browser's encoder is tuned for speed rather than for the last few percent a dedicated compressor would find. And swapping a lossy source for a lossless export, a JPEG in and a PNG out, routinely multiplies the size of a photograph several times over. Crop to fill usually produces a smaller file than the original, PNG usually a much larger one, and running the result through the image compressor afterwards takes back most of the difference.

Can I rotate a GIF and keep it animated?+

No, and the page tells you so when you load one. A GIF is decoded here as a still, one frame is transformed, and the export is a single picture. Keeping the animation would mean decoding every frame, transforming each of them, re-timing the sequence, and encoding a new GIF, which is a different tool with a very different cost in memory and time. If the animation matters, rotate it in a video or animation editor. The still export is still useful when you want a thumbnail, a cover image, or a poster frame, and it is the only frame most previews would show anyway.

What are the size limits, and why do they exist?+

One file up to 25 MB, a source up to 40 megapixels, and a finished canvas no larger than 8,192 pixels on its longest side or 40 megapixels in total. They exist because every one of those pixels is real memory in your tab: a decoded picture costs four bytes per pixel, and the rotated copy costs that again, so a 40 megapixel photo is already several hundred megabytes of working set before the encoder starts. Rotation makes the ceiling easier to hit than you might expect, because a tilted canvas is larger than the picture it holds, and switching to crop to fill is often enough to bring an oversized export back under the line. The page also warns you when the output passes roughly 16.8 megapixels, because some phone browsers quietly cap a canvas near there and hand back a blank image rather than an error.

More focused tools, ready when you are.

Explore the growing collection for calculations, documents, writing, and everyday work.

Browse all tools