The darkroom · Crop

Crop a photo without uploading it

Add a photo and a frame appears over it. Drag the frame to move it; drag a corner or an edge to change its size; nudge it with the arrow keys; or type the numbers, in the photo’s own pixels. The crop is made in this tab.

Open the tray How it works

Drag, nudge or type exact pixels · Free, 1:1, 4:3, 3:2, 16:9, 4:5 · cut from the full-size picture · 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.

    Crop

    A frame in the photo’s own pixels

    Drag, nudge or type

    Add a photo and a frame appears over it. Drag the frame to move it; drag a corner or an edge to change its size. With the frame focused, the arrow keys move it one pixel at a time, or ten with Shift. Or type: left, top, width and height are in the photo’s own pixels, not the preview’s, so a crop of 1080 × 1080 is exactly that.

    The handles are drawn small and answer a finger across 44 pixels, so the frame can be worked on a phone as well as with a mouse; the line under the stage always says the frame’s size and position in the photo’s own pixels.

    Fixed proportions

    Free lets the frame take any shape. The other buttons hold it to 1 : 1, 4 : 3, 3 : 2, 16 : 9 or 4 : 5 while you drag, and keep width and height in step when you type one of them.

    What is cut from

    The photo is decoded the right way up, following its Orientation tag, so the frame you see is the frame you get. The crop is taken from the full-size picture; the preview is only a smaller drawing of it, at most 1,200 pixels wide.

    What comes out

    A new file holding the frame and nothing else, in the format of the original or the one you choose, named with its size: portrait-crop-1080x1080.jpg. It is a re-encode, so for JPEG, WebP and AVIF the quality slider applies. The new file carries none of the original’s metadata, the embedded thumbnail included — a crop cannot survive uncropped in miniature here. The colours are converted to sRGB and the original’s ICC profile is not carried over.

    That thumbnail is worth a look before you crop anywhere else. Many editors cut the picture and leave the small copy the camera wrote inside the EXIF as it was, so the part you cut away travels with the file you share. The tray shows that thumbnail on the photo’s card, under What it says.

    One photo at a time

    A crop belongs to one picture, so this tool works on the picked photo only. Press another picture in the tray and the frame starts again for that one. Cropping a JPEG here decodes and re-encodes it. A photo the browser cannot decode cannot be cropped here; pictures over 100 megapixels are not decoded, and a crop larger than the browser’s canvas limit is refused with a message.

    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