ResizeTo

How it works

There are two ways to make an image smaller: compress it harder, or store fewer pixels. They do not cost the eye the same amount, and the tool has to choose between them on every file.

Why not just lower the quality

The obvious approach is to keep every pixel and turn the JPEG quality dial down until the file fits. It works, and it produces something unusable. On a real 3000 × 2000 photograph, reaching 200 KB that way lands at quality 9: a mess of blocking artefacts, technically compliant and impossible to submit.

The reason is that the two levers fail differently. Removing pixels deletes information: the picture gets smaller, but what remains looks correct. Crushing the quality invents damage that was never in the photograph: blocks, halos, banding. Past a certain point, fewer pixels at usable quality read better than more pixels at ruined quality.

The quality floor

So the search never goes below quality 70, the bottom of the band where JPEG stays clean. If the target cannot be met at that quality, the tool reduces the dimensions and tries again, rather than pushing the dial further down.

The one exception is a target so tight that even the smallest sensible image will not fit. Rather than answer "impossible" to someone facing a hard upload limit, the tool then spends the quality it has left. It tells you what it did.

Finding the largest image that fits

Reducing dimensions in steps is crude: each step removes nearly half the pixels, so the first size that fits usually fits with room to spare, and that spare room gets spent on quality nobody asked for. The tool therefore walks back up, narrowing between the last size that failed and the first that worked, to find the largest image that still holds quality 70.

On that same photograph at a 200 KB target, the refinement is the difference between 949 × 633 and 1246 × 831: 72% more pixels for exactly the same file size.

The quality itself is found the same way, by halving the interval: eight passes land within a fraction of a point of the best value that fits.

It adapts to the photograph

How far the dimensions have to fall depends entirely on the content. A smooth portrait compresses cheaply and keeps most of its size; a dense city scene full of edges costs far more per pixel and shrinks further. Measured on five different photographs against the same 200 KB target, the results ranged from 77% of the original width down to 45%, all at quality 70 and all between 194 and 199 KB.

When nothing needs doing

If your file already fits and you asked for no resizing, it is handed straight back. Re-encoding a JPEG that is already small enough reliably makes it bigger: measured at 348 KB in, 474 KB out before this case was handled.

A PNG or HEIC is always converted, though, since that conversion is half of why people come here.

Choosing the output format

JPEG is the default because it is the one every upload form accepts. Two others are available when the destination allows them:

Transparency survives WebP and PNG. It cannot survive JPEG, which has no alpha channel, so transparent areas are flattened onto white.

Turning an image

Each result carries two quarter-turn buttons. The rotation is applied to the pixels rather than recorded as a flag, so the file you download is upright in every viewer, including the ones that ignore the EXIF orientation tag.

It also means the turn is not free: unlike a lossless rotation it goes through the encoder, so set the turn before settling on a tight size target rather than after.

What it does not do

Nothing leaves your browser

All of the above runs inside the page, on your machine. The image is never transmitted, which is why it is instant and why you do not have to trust anyone about what happens to the file afterwards.