Optimize
Rotate HEIC
Turn or flip HEIC photos without re-encoding them. Only the rotation flag changes, the picture data stays byte for byte identical, and every file is checked before you get it.
Input
Drop HEIC or HEIF files here
or choose them from your device
HEIC or HEIF · up to 100 MB per file · processed on your device
At a glance
- Input
- HEIC/HEIF, up to 50 files
- Output
- Still a HEIC, same coded image data
- Changes
- Rotation flag and Exif Orientation only
- Checked
- Re-read, byte-compared and decoded
What this tool does
This tool turns or flips a HEIC without re-encoding it. A HEIC does not have to be stored the way it is shown: it carries a rotation instruction (the HEIF irot and imir properties) that tells a viewer to turn or mirror the picture, and phones also repeat it in the Exif Orientation tag. Rotating here means changing those instructions. The compressed picture data is not touched, so there is no generation loss, and in my tests the hash of the image data was identical before and after every time.
That is also why an iPhone photo can look wrong in one app and right in another: the pixels are stored in the camera's own direction and the flag does the turning. Each photo is shown with its stored orientation (what the file says now, in both places), a live preview of the change and what it will say afterwards. Left, right, 180°, flip horizontal and flip vertical stack on top of whatever is stored, and the buttons above the list apply a change to every photo at once. If the Exif tag and the HEIF rotation disagree, the page says so, and saving makes them agree.
Each file is checked before it is offered. The tool re-reads the output as a new container, compares every item's bytes with the original, hashes the coded image data, reads the Exif Orientation with a second parser and decodes the result to confirm the size is right and the pixels equal the original, turned the same way. A file that fails any check is discarded, not downloaded. In my tests I put 42 files through all five operations in Chromium (210 outputs) plus a 27 MP and a 48 MP photo: every output passed, and an independent decode with pillow-heif (libheif 1.23) matched the turned original pixel for pixel in all but 11, which are explained under Good to know.
Cropping is a different problem. It removes pixels, so a cropped HEIC has to be re-encoded, and this tool does not crop. For a crop, convert the photo with HEIC to PNG (lossless) or HEIC to JPG, crop it in any editor, and use JPG to HEIC if you need a HEIC again. If what you need is a different size rather than a different shape, see Resize HEIC.
How to use it
- 01
Add your HEIC photos
Up to 50 files or 500 MB. Each file is read and decoded once for the preview; a 27 MP photo took about 5 seconds in my test, a small one well under a second.
- 02
Read what is stored
The Stored now line shows how the photo is oriented today, with the HEIF rotation and the Exif Orientation value. Open What does stored mean for a plain explanation.
- 03
Turn or flip
Use Left, Right, 180°, Flip H or Flip V on a photo, or on the bar above the list to change them all. The preview updates immediately, Will be saved as shows the result, and Reset undoes your changes without touching the file.
- 04
Press Save
Each changed photo is edited and then verified. Photos you did not change are skipped. Files are named with -rotated, or -flipped for a pure mirror.
- 05
Read the report
For each file it shows the orientation before and after in all three forms (what it looks like, irot/imir and Exif), the dimensions, how many bytes changed and the checks that ran.
- 06
Download
Download one file or all of them as heic-rotated.zip.
When to use it
A photo that is sideways in one app only
The stored flag is being read by some apps and ignored by others. Set the orientation you want and both records say the same thing afterwards.
Documents and whiteboards shot sideways
Turn a batch of pages 90 degrees in one go and keep the original HEIC quality, instead of converting every page to JPG just to rotate it.
A mirrored selfie or scan
Flip it horizontally or vertically. This is stored as a mirror flag, so it is reversible and costs a few bytes.
Checking what a file really says
The Stored now line is a quick read of the rotation and the Exif tag, including files where the two disagree.
Good to know
- 01Tested on files made with pillow-heif and libheif and on hand-built variants of them, not on a broad set of genuine iPhone and Android photographs. I could not test Apple, Windows or Android apps here, only libheif 1.23 (through pillow-heif and the browser build) for decoding and libheif 1.17 for opening the files.
- 02Apps that ignore both the HEIF rotation and the Exif Orientation cannot be helped by any rotation of this kind. If a file has no Exif Orientation tag, an app that reads only Exif will not see the change; the tool tells you when that is the case.
- 03Mirrors rely on the
imirproperty, and the standard's wording for which axisimirmirrors has been read both ways. This tool follows libheif (axis 1 swaps left and right), which is what pillow-heif and the browser decoder do. A viewer that reads it the other way would show a flip on the other axis. Pure rotations do not useimir. - 04Only the main image is rotated. If the file holds other images, or an image sequence, they keep their own orientation, and the report says so. A photo's thumbnails and auxiliary images (alpha, depth, HDR gain map) are turned with it so they still match.
- 05Some layouts are refused rather than risked: a main image that is a derived image other than a grid of HEVC tiles, a 64-bit metadata box, fragmented containers, item-offset (construction method 2) or external data, a rotation listed before a crop (
clap), non-square pixels combined with a quarter turn, and an Exif Orientation tag in an unusual form. You are told which, nothing is changed, and converting the photo is the fallback. - 06A file this page cannot decode is not offered even when its structure is fine, because the decode is part of the check. Subsampled colour shows one known quirk: when the colour is stored at lower resolution than the brightness and the picture has an odd-sized crop (or is 4:2:2 and turned a quarter), a decoder places the colour one pixel differently after the turn. The coded data is still identical. In my tests this affected 3 of 42 files, with PSNR of about 40 dB against the turned original, and the tool labels the check as approximate instead of exact.
- 07Files grow by a few bytes when a rotation property has to be added (10 to 17 bytes in my tests) and stay the same length when an existing one is changed. The modified time of the file changes.
Technical notes
Privacy and limits
Your file stays on your device
This tool runs in your browser with WebAssembly. The file is read into the tab, processed there and discarded when you close it — there is no upload and no account. You can check this yourself in your browser's network panel, and the privacy page lists what analytics does and does not receive.
Limits and checks
Up to 100 MB and 100 megapixels per file; batches of up to 50 files and 500 MB. Files are treated as untrusted input and every output is re-opened and validated before it is offered — see how we handle untrusted files.
Frequently asked questions
Related tools and reading
Last updated: . Something wrong or out of date? Tell us — corrections are recorded in the changelog.