ResizePicture

ResizePicture

Every photo, the perfect size.

Resize a photo

About ResizePicture

A tool people use for ninety seconds in the middle of doing something else. That constraint decided nearly everything about it.

One job

ResizePicture does one job: it makes a picture the size you were told. That size may be two numbers in pixels, a limit in kilobytes, a width in centimetres at a DPI, a percentage, or a form's preset that combines them. It is not an editor with a resize panel in it. There is no filter shelf, no layers and no account. The product is two fields with a chain between them, four ways of handling a shape mismatch, the other ways to state a size — percent, long edge, short edge, megapixels, print size — a file-size search, and a download button that tells you the size of the file before you press it.

That narrowness is the design. A resizer is a thing people use for ninety seconds in the middle of doing something else, usually because a form or an editor or a colleague has given them a specification. Ninety seconds is not enough time to learn an interface, so the interface has to be over before it starts.

How it is built

The site is a set of static files. There is no server behind it, no database, no API and nowhere for a picture to go. Opening a file hands it to the browser's own decoder; the resampling runs in a worker thread inside the tab so the page stays responsive on a large photograph; the encoding uses the encoder that is already in your browser. The download link points at memory in this tab and is thrown away when you close it.

One consequence is worth naming: because everything happens locally, the site can never fix a picture your browser cannot read. HEIC needs a decoder no browser has, which this site loads on demand rather than up front. A corrupt JPG is a corrupt JPG. Anything a server-side tool could brute-force with a different library is out of reach here, and the trade for that is that no picture of yours is ever in anybody else's log file.

The HEIC decoder is libheif, compiled to WebAssembly and distributed as libheif-js under the GNU Lesser General Public License, version 3. It is loaded as a separate file, unmodified, only when a HEIC is opened; its source and licence are published by its authors at github.com/catdad-experiments/libheif-js.

What it deliberately does not do

Some of these are limits of today's build and some are choices. Each is stated so nobody assumes the page did something it did not:

  • No DPI written unless you ask. The print-size method turns centimetres at a DPI into pixels; writing the DPI into a JPG or PNG header is a separate, opt-in step (and /change-dpi does only that, without re-encoding). It adds no detail, and the page says so.
  • No hidden AI. Enlarging in the resizer is interpolation, and the page measures how much of the result was invented. AI enlargement lives on its own page, /upscale-image, runs on your device, and labels its output as reconstructed detail — generated, not recovered — with -ai2x or -ai4x in the file name.
  • No surprise names. A folder's files are named after their original and new size unless you write your own pattern ({name}, {w}, {h}, {n}) in the batch panel.
  • No crop on the default surface. Fill keeps the box's shape and lets you slide the picture inside it; a free crop rectangle, with ratio lock, turn and mirror, lives on its own page, /crop-and-resize, so nobody crops by accident.
  • No invented pixels in a pad. Pad adds a margin in a colour you choose — white, black, the picture's own average, clear, or a blurred copy of the picture itself — and labels how many pixels it added.
  • No filler to reach a minimum file size. A kilobyte target is met by searching the encoder's quality and, only if you allow it, by using fewer pixels. If a file cannot reach a form's minimum, the page says so.

Honesty about limits

Making a picture smaller throws pixels away. We choose the order of operations that throws away the least, and there is no setting on this page that gets them back — a 4000 px photo resized to 800 and then back to 4000 is not the photo you started with.

The second limit is quieter and catches people out more often: the working space here is 8-bit sRGB, so a photograph in a wider colour space comes back flattened. If you are working to a colour-managed print process, that flattening is a real cost and you should know about it before you save rather than after.

Money

There is no advertising on this site and no advertising code in it. There is no paid tier, nothing is held back, and no feature is worse than it could be in order to sell you a better one.