The darkroom · Resize

Resize an image without uploading it

Give a box in pixels. With “fit inside the box” the photo is scaled until it fits, keeping its proportions; with “exactly this size” it is made that wide and that tall. One photo or a whole folder, and nothing leaves this tab.

Open the tray How it works

Fit a box or set an exact size · 50%, 25%, 2560, 1920, 1280, 800 · never enlarge · a batch as one ZIP · 0 bytes uploaded

The tray

Drop them in. Read them. Clean them.

Each photograph gets a card: what the file really is (by its bytes, not its name), its size, and a flag for every thing in it that points at a place or a person. What it says opens the lot, tag by tag. Strip takes the metadata out and leaves the picture exactly as it was; Develop writes a new file in the format and size the developer is set to. Beside the tray, the bench holds the other tools — the Exif viewer, Convert, Resize, Compress and Crop. Several photos at once is the point: the buttons under the drop zone do the whole tray.

The tray

Empty — nothing read yet

Drop photographs hereYour photographs, read here

JPEG, PNG and WebP; HEIC and AVIF where this browser can decode them. Or paste an image. Nothing is uploaded.

Change it

    The tray is empty. Choose some photographs, drop them anywhere on this page, paste one, or try the sample — a picture drawn by this site whose metadata was written by hand the way a phone writes it.

    A batch lives in this tab’s memory until you clear it or close the tab. Nothing is written to the browser’s storage except the developer’s settings.

    Resize

    A box of pixels

    Fit, or exactly

    Give a box in pixels. With fit inside the box the photo is scaled until it fits, keeping its proportions: a 4000 × 3000 photo in a 1920 × 1920 box comes out 1920 × 1440. With exactly this size it is made that wide and that tall, stretched if the proportions differ. The buttons fill in the box for you — half, a quarter, or a longest side of 2560, 1920, 1280 or 800 pixels — and while the lock is on, typing one side fills in the other in proportion to the picked photo.

    Never enlarge is on by default: a photo already smaller than the box is written at its own size, and the card says so. Turn it off to scale up. The developer, in the first tab, resizes the other way — by a long edge, a width, a height or a percentage — together with the format, in one pass.

    A whole folder of photos

    Add many photos and press Resize all. Every photo is fitted into the same box, each keeping its own proportions, so portrait and landscape pictures both come out right. The results download one by one or together as a ZIP, written in the page.

    How it is done

    The picture is decoded by your browser, following its Orientation tag, and drawn on a canvas of the new size with the browser’s high-quality smoothing asked for. When the photo is not turned by its Orientation and is being made smaller, the page asks the decoder for the smaller size directly, so the full-size picture never has to sit on a canvas — which is what lets a large photo be reduced on a device whose canvas could not hold it whole. Where that is not possible, a big reduction is drawn in two steps, which aliases less than one.

    What comes out

    By default the new file has the format of the old one — JPEG stays JPEG, PNG stays PNG, WebP stays WebP where the browser can write it — or you can choose. Anything else, a HEIC for instance, is written as JPEG. For JPEG, WebP and AVIF the quality slider applies. Resizing is a re-encode: the new file carries none of the original’s metadata, its colours are converted to sRGB, and the original’s ICC profile is not carried over. The file name says the new size, so beach.jpg becomes beach-1920x1440.jpg.

    Limits

    The largest picture a browser can draw is set by the browser and the device. If the size you ask for is past that, the page says so and writes nothing. Pictures over 100 megapixels are not decoded. A photo the browser cannot decode cannot be resized here; its metadata can still be read in the Exif viewer. If you only want the metadata gone and the pixels left exactly as they are, do not resize: remove the EXIF data losslessly instead.

    How to check that nothing is uploaded. The page’s own scripts make one request of their own — the sample card, from this site, when you press for it — and none that carries a file. The folder is served with a Content-Security-Policy header that lets the page connect only to this site and to Google’s analytics hosts, so even a mistake here could not send a photo anywhere else: the browser would refuse it. Open the developer tools, choose the Network tab, clear it, then add a photo and run the tool, and watch. Google’s analytics counts the visit and that a tool was used; nothing in this page hands it a file name, a pixel or a tag.

    Method

    What is read, what is written, and what is sent: nothing.

    Fetched, computed, sent

    There is no upstream and no server doing the work. The page loads its own files from this site, and the sample card from this site when you ask for it; your photographs are read from disk into this tab’s memory, worked on there by the page’s own readers and the browser’s own decoders and encoders, and handed back as downloads made in that memory.

    The folder is served with a Content-Security-Policy header whose connect-src allows this site and Google’s analytics and ad-measurement hosts — *.google-analytics.com, analytics.google.com and *.analytics.google.com, *.googletagmanager.com, www.google.com and its country domains, and stats.g.doubleclick.net — and nothing else. The full method — every format read by hand, every limit, every source — is on the darkroom’s front page.

    Sources for this tool