Mirroring an image online means loading it in a browser tool and pressing Flip Horizontal, and the result is a true mirror: every pixel moves to column width minus one minus x, with no resize, crop or blur. Nothing about the operation is approximate.
The part that decides whether the file you download is still an exact mirror is the export format, not the mirror. Exported as PNG the mirrored file matched the computed mirror in 0 of 1,920,000 pixels in our test. Exported as JPG at the default quality, 86% of pixels differed slightly, because JPG re-compresses the picture on the way out.
A horizontal mirror is a coordinate swap, not a redraw. The pixel at column x lands at column width − 1 − x, and its row stays where it was. The minus one is not a rounding quirk: columns are numbered from zero, so the last one is width minus one, and without it the rightmost column would fall off the frame.
That one line explains most of what people find surprising about mirroring. Dimensions cannot change, because pixels move inside the same frame. Nothing is resampled, so no detail is averaged away. And the operation is its own inverse, because applying the swap twice returns every pixel to where it started.
| Property | After a horizontal mirror | Why |
|---|---|---|
| Width and height | Unchanged | Pixels are relocated, not added |
| Pixel count | Unchanged | Nothing is cropped or padded |
| Sharpness | Unchanged | No interpolation happens |
| Which way the subject faces | Reversed left to right | That is the whole point of the operation |
| Colours | Unchanged | A mirror is not a colour operation |
On an even-width image every column has a partner to swap with. On an odd-width image one column does not: the centre one, which maps onto itself. Mirror a 1601-pixel-wide file and 1600 columns move while one stays exactly where it was.
This is worth knowing for two reasons. It is the cheapest way to check that a tool is using the right formula, because an off-by-one would show up as a one-pixel shift rather than a mirror. And it explains why mirroring a picture twice returns the original: if the mapping is width − 1 − x, the centre column is a fixed point and every other column swaps back with its partner.
Every figure below came from driving this site's own flipper in a headless Chromium browser: upload a file, press Flip Horizontal, download in the chosen format, then compare the downloaded file against the exact mirror computed independently, pixel by pixel, with no tolerance. Nothing here was estimated from a format specification or copied from anywhere.
PNG came back exact, and not marginally so. Three files went through — 1601 by 901, 1600 by 900, and a 1600 by 1200 gradient scene — and the exported mirrors differed from the computed mirrors in 0 pixels out of 1,442,501, 1,440,000 and 1,920,000 respectively. The alpha channel matched exactly too, which matters if the source had a cut-out background: a correct mirror moves transparency rather than inventing or losing it.
JPG is not exact, and how far off it lands depends on the picture rather than on the tool. That same 1600 by 1200 scene exported at the default 92% differed in 86.5% of pixels, with 54.1% of them off by more than two levels, a mean difference of 1.6 levels per channel and a maximum of 36. Swap in a harder image — sharp edges, colour changing every column — and the identical export differed in 97.7% of pixels, with a mean of 13.8 and peaks at 255. One click, one tool, two very different error profiles, because block compression and chroma subsampling punish hard edges hardest.
That gap is the distinction worth carrying away. A mirror is a permutation: every pixel that goes in comes out, at a mirrored address. A JPG export is a new approximation of those pixels, produced by an encoder that neither knows nor cares that the arrangement is a mirror. The permutation is exact; the encoder is not. If the downloaded file has to be a true mirror, the format is the decision that settles it, not the button.
WebP sits between the two in a way that is easy to misread. At 92% it differed in 99.8% of pixels on the smooth scene, so almost every pixel moved a little, but the mean difference was 1.7 levels and the maximum 33. The error is spread thin instead of concentrated. It is still not exact: a file where nearly every pixel is slightly wrong is a very good copy, not a mirror in the arithmetic sense.
Exactness has a byte cost and it is larger than most people expect. The 1600 by 1200 scene came out at 3,073,806 bytes as PNG, 147,249 as JPG and 79,440 as WebP. Choosing exact over approximate was roughly twenty-one times the JPG and thirty-nine times the WebP. For a screenshot or a logo that trade is right; for a photograph on a web page it usually is not.
One more check, because it is the one a reader can repeat without any tooling: the mirrored PNG was uploaded again and mirrored a second time. The result was identical to the original in all 1,920,000 pixels, zero differences. That is also why the odd-width case deserves a paragraph of its own — a mirror is its own inverse only if the tool uses width minus one minus x. Get that wrong by one and the picture shifts a column every time it is applied, so the error compounds instead of cancelling.
Two limits on all of the above. JPG has no alpha channel, so the transparent band in the striped test file came out solid, and the comparison recorded a maximum channel difference of 255 in exactly that band. That is the format discarding transparency, not the mirror failing, and it is the reason a cut-out logo should leave as PNG or WebP.
What we did not test and will not claim: HEIC, AVIF, TIFF, RAW or PSD sources, which the file picker does not accept; phone browsers, so every figure describes desktop Chromium and nothing else; files large enough that decoding time becomes noticeable; animated GIFs past the first frame; and any other online mirror, because comparing tools was not the question here.
Step three is the only one that proves exactness rather than suggesting it, and it works on any tool, not just this one. It costs one extra click and removes the need to trust a badge or a claim.
| What you are mirroring | Does exactness matter? | Export as |
|---|---|---|
| Iron-on transfer or printed text | Yes — reversed letterforms are unforgiving | PNG |
| Logo with a transparent background | Yes — transparency must survive | PNG or WebP |
| Screenshot of an interface | Yes — sharp edges ring visibly | PNG |
| Photograph for a web page | No — a level or two cannot be seen | JPG or WebP |
| Keeping a mirrored copy on disk | Yes — you may mirror it again later | PNG |
The rule behind the table is simple: exactness matters whenever the file will be read by a machine or printed at full size, and stops mattering when it will only be looked at. Photographs are looked at. Text, edges and transparency are read.
Yes, as an operation. A horizontal mirror maps the pixel at column x to column width minus one minus x, with no resampling, so nothing is stretched or blurred. Whether the downloaded file is still exact depends on the export format: PNG output matched the computed mirror in 0 of 1,920,000 pixels in our test, while JPG output differed in 86% of them.
Because JPG is lossy. The mirror itself only relocates pixels, but exporting re-compresses the picture, and that encoder approximates every block it writes. On a smooth 1600 by 1200 scene the average difference was 1.6 levels per channel, which is invisible; on a hard-edged image it rose to 13.8 levels with peaks at 255.
No. Width and height are unchanged, and so is the pixel count. A 1601 by 901 file exports at 1601 by 901. On an odd width the centre column has no partner to swap with, so it stays where it is, which is why 1600 of the 1601 columns move in that example.
Mirror the image, download it as PNG, then load that file back and mirror it again. Two mirrors of the same axis return the original exactly. If the second export matches the first original pixel for pixel, the tool is doing a true mirror rather than shifting or resampling. In our run that second export differed in 0 of 1,920,000 pixels.
PNG if the mirror has to be exact or the source has transparency, since JPG has no alpha channel and fills transparent areas with a solid colour. JPG or WebP if you only need a smaller file for a web page, where a difference of one or two levels per channel cannot be seen.