Rotate photos in 90° steps, mirror them horizontally or vertically, and batch the set to PNG, JPEG or WebP with a live dimension readout.
Rotation and flipping run locally in your browser. Your images never leave your device.
Drop images here
PNG, JPEG, WebP or GIF — add as many as you like. Click to browse.
Every image is decoded once into an Image element. Each row keeps a small state — a quarter-turn count plus two flip flags — and the buttons mutate it in place, so you can stack operations (right, right, flip-H) and the live W × H readout updates as you go. Downloads run the state through one canvas pass.
translate(ow/2, oh/2), rotate(r), scale(±1, ±1), then drawImage(img, −w/2, −h/2). Because the origin sits at the canvas centre, the same half-width/half-height offsets keep the rotated rectangle perfectly framed at 90°, 180° and 270°.width = source height, height = source width. The badge on each row recomputes this instantly, which is also why a landscape screenshot becomes portrait without any cropping.Pixel-wise, yes — every source pixel is copied to its new position, no cropping or resampling happens, so the geometry is exact. The honest caveat is encoding: any export (PNG, JPEG, WebP) is a fresh encode of the pixels, and JPEG/WebP additionally quantize at your chosen quality. Rotating an already-compressed JPEG to PNG is therefore pixel-perfect but larger; rotating JPEG→JPEG at high quality is a second lossy generation, which viewers rarely notice but which does happen.
No — only 90° steps. Free-angle rotation would require resampling every pixel onto a new grid and filling corner gaps, which softens the image. The four right-angle steps are exactly what phone sensors, forms and scanned pages need, and they keep the output dimensions whole pixels.
Yes. Each button applies incrementally to the current state, and horizontal/vertical flips are interpreted on screen — after a 90° turn, the Horizontal button flips along what you now see as horizontal, matching what a viewer would expect rather than the file's internal axes.
There is no hard cap, but everything is held decoded in memory. A dozen typical phone photos work fine; a hundred 48-megapixel files can exhaust a browser tab. Download each result you need, then use Remove on rows you are done with, and the ZIP is built on demand at the moment you click it.
No. Decoding, the canvas transform math, re-encoding and the ZIP assembly all run on your device. The only network dependency is the JSZip library loaded from a CDN — if it is unavailable (offline, blocked), the tool says so and the per-file downloads keep working.
If you just finished with Image Flip & Rotate, the natural next steps are Image Watermark, Image Blur, Image Color Picker, or browse every tool in Privacy File Tools.