How it works
We translate the canvas to its centre, apply rotate() and scale() for any selected flips, then draw the source image. Output is PNG to preserve transparency.
FAQ
Why are rotations limited to 90° steps? Rotating by 90° increments is lossless — pixels just move to new grid positions. Arbitrary angles (e.g. 13°) require resampling, which softens the image, and the canvas has to be enlarged to a bounding box that introduces transparent corners. Most rotate-flip needs are 90° anyway (camera-orientation fixes, screenshot tilts).
Can I combine rotation and flips? Yes. Rotation and flips compose — for example, "rotate 90° then flip horizontal" gives a result equivalent to rotating 90° in the opposite direction. Toggle the buttons in any order; the preview reflects the combined transform.
Why does my downloaded file look different than my source? We always re-encode to PNG so we can preserve transparency from any input. If your source was JPEG, you may notice the file is larger but visually identical (PNG is lossless).