FreeToolio

Crop Image

Drag a box over the part of the photo you want to keep, or type the exact pixel edges. The crop is written by your own browser at its true size — the frame changes, the pixels inside it are copied, and the file never leaves this tab.

Drop a photo here

or choose a file · JPG, PNG, WebP, GIF, AVIF or HEIC · one at a time · up to 40 megapixels · or paste with Ctrl + V

Crop to exact pixels · aspect presets · JPG, PNG and WebP output · no upload · no account · no watermark

Crop Image: The Pixels Inside the Box Are Copied, Not Redrawn

Drag a box over a photo and download what is inside it. That is the whole tool, and it runs in this tab: no upload, no account, no watermark.

What happens under the box is more literal than the interface suggests. An 800 × 600 crop of a 1,600 × 1,200 PNG came out pixel for pixel identical to the same region of the source: 0 differences across 1,440,000 colour values. The same crop saved as JPG at quality 92 differed on 1,349,362 of those values. A crop moves the frame, and the output format decides what happens to the pixels you kept.

The same 800 by 600 crop of one 1,600 by 1,200 photograph, saved four ways. The PNG file is 1.04 MB at 2.171 bytes per pixel and keeps every value: 0 of 1,440,000 values changed. JPG at quality 92 is 169 KB at 0.353 bytes per pixel with a largest channel difference of 28 levels, WebP at quality 92 is 149 KB with 18 levels, and JPG at quality 75 is 99.8 KB with 50 levels. Bar length is file size.
The same 800 × 600 crop, written four times. Bar length is the file's bytes, not its pixel count: all four files hold 480,000 pixels. The PNG is the only row that reproduces the source region exactly; the JPG and WebP rows pay for their smaller files with a re-encode.

How to crop an image here

  1. Add a photo. Drop it on the box above, choose a file, or paste an image with Ctrl + V. JPG, PNG, WebP, GIF, AVIF and HEIC all open, up to 40 megapixels.
  2. Move the box. Drag inside it to reposition, drag a handle to resize, or type the edges in the X, Y, Width and Height fields.
  3. Pick a shape if the destination needs one. Free, 1:1, 4:5, 3:2, 16:9 and 9:16 lock the box; Free leaves it rectangular.
  4. Download. The result card reports the exact output size, the aspect ratio and the file's bytes before you save it.

What each control does

The canvas. The bright area is the crop and the dimmed area is what leaves. Nothing is written until the encoder runs, so dragging the box another few pixels costs nothing.

Aspect presets. Each preset opens the largest box of that shape that fits the photo, centred, and then keeps the shape while you resize. Ratios are honoured in whole pixels, so 3:2 on a 1,600-pixel-wide photo comes out 1,600 × 1,067, not 1,600 × 1,066.67.

X, Y, Width, Height. These are source pixels, counted from the top-left corner. Typing 1,000 × 500 at x10 y20 reproduced that region with 0 differences, so the numbers are the file you get, not an estimate. A value that would push the box past an edge is clamped to the photo.

Format and quality. "Match photo" keeps the original type. PNG is lossless; JPG and WebP re-encode at quality 92, 85 or 75, and the quality menu hides itself for PNG because there is nothing to trade.

The result card. It prints source size → crop size, the new aspect ratio against the original, the format, and the exact bytes. Transparency is shown on a checkerboard, so a crop with an empty corner is visible before download.

A crop is a copy, not a redraw

One 1,600 × 1,200 PNG went in, an 800 × 600 box at (300, 200) came out, and the output was decoded and compared with the same rectangle of the source, channel by channel. 0 of 1,440,000 colour values differed, and the maximum channel difference was 0. The file was 997,173 bytes against 3,969,403 bytes for the full frame: a quarter of the pixels, 25.12% of the bytes.

The typed route lands on the same pixels. A 1,000 × 500 box at (10, 20), entered through the four number fields, matched its source region on every value as well. The box in the picture and the numbers in the fields describe one rectangle, and the encoder uses that rectangle directly.

The mechanism is drawImage with a source rectangle and a destination of exactly the same size. No resampling filter runs because no pixel is being invented: each output pixel has one source pixel, at the same coordinates. Resizing is the operation that interpolates, and this page does not resize. That job belongs to the image resizer.

JPG and WebP break the equality on purpose. The same 800 × 600 crop of a real 1,600 × 1,200 photograph, written four ways:

Output Bytes Bytes per pixel Largest channel difference PSNR
PNG 1,041,915 2.171 0 lossless
JPG, quality 92 169,298 0.353 28 levels 40.66 dB
WebP, quality 92 149,462 0.311 18 levels 41.65 dB
JPG, quality 75 99,807 0.208 50 levels 33.14 dB

The PNG is 6.2 times the JPG at quality 92 for the same rectangle. The gap is what keeping every value costs. Use PNG when the crop feeds an editor or gets measured again. Use JPG or WebP when the file is going to be sent, uploaded or viewed.

What the new file does not carry

A crop here is a new file, not a byte-range cut out of the old one. The pixels are copied, then the whole image is encoded again, which means container data has no route into the output.

The test JPEG carried four EXIF entries, including a GPS block. Both outputs carried zero: the PNG had no eXIf chunk, the JPG had no Exif marker. The JPG did receive a 456-byte sRGB ICC profile from the browser; the PNG received no colour profile at all, so a colour-managed application reads its numbers as sRGB.

That behaviour is the opposite of a non-destructive crop. Microsoft's Office keeps cropped areas inside the file and warns that they can be seen by others, including search engines; Figma describes its crop as non-destructive. Here the pixels outside the box are absent from the downloaded file, which is what you want when the photo leaves your machine, and not what you want if you planned to reopen the frame later. Keep the original.

A quarter of the pixels, a quarter of the PNG, not a quarter of the JPEG

The PNG arithmetic is almost boring. The crop kept 480,000 of 1,920,000 pixels, or 25.0%, and the file fell from 3,969,403 to 997,173 bytes, or 25.12%. The cost stayed at 2.067 bytes per pixel for the full frame and 2.077 for the crop. A PNG stores every pixel, so its size follows the area.

JPEG follows detail instead. On the real photograph, the full frame at quality 92 was 451,506 bytes, and the 800 × 600 centre crop was 169,298: 25% of the pixels but 37.5% of the bytes, because the crop kept the busy middle of the picture and threw away plainer edges. Crop a patch of flat sky and the JPEG will be tiny; crop foliage and it will not.

One more consequence: re-encoding the whole frame at quality 92 made the file bigger than the source, 451,506 bytes against 337,057, a 34% increase. The original had been encoded at a lower quality, and quality 92 spends more bytes on the same pixels. A crop guarantees fewer pixels, not a smaller file. If a KB ceiling is the actual requirement, the image compressor solves for it directly.

Aspect ratios in whole pixels

The same 1,600 × 1,200 source, each preset applied without moving the box:

Preset Crop box Position Share of the frame
1:1 1,200 × 1,200 x 200, y 0 75.0% of the pixels
4:5 960 × 1,200 x 320, y 0 60.0%
3:2 1,600 × 1,067 x 0, y 67 88.9%
16:9 1,600 × 900 x 0, y 150 75.0%
9:16 675 × 1,200 x 463, y 0 42.2%

The 3:2 row is the honest one: 1,600 ÷ 1.5 is 1,066.67, and the tool writes 1,067. A locked ratio can miss by half a pixel, never more, because a file cannot hold two thirds of a pixel. At this width the error is 0.03%.

The 9:16 row shows what a portrait crop costs a horizontal photo: 675 of the 1,600 columns survive, so 58% of the width is gone. If the subject sits near an edge, move the box before downloading; the preset only centres it.

Why the file never leaves the tab

The page loads one script and then does the work itself: the browser decodes the photo, copies the selected rectangle onto a canvas, and encodes the result. During a crop, the page's resource timeline recorded 0 requests. With the network switched off, the same crop produced 884,334 bytes, byte-identical to the online run by SHA-256.

Nothing travels, so nothing waits on a connection. In a headless Chrome without GPU support, an 800 × 600 crop encoded in 26 ms as JPG, 61 ms as PNG and 470 ms as WebP; the full 1,600 × 1,200 frame as JPG took 102 ms.

Quick answers

Does cropping change the pixels? In PNG, no: 0 of 1,440,000 values changed in the test. In JPG and WebP, yes, once, by the amount in the table above.

Why is the cropped PNG so much larger than the JPG? PNG stores every pixel at 2.171 bytes per pixel here; JPG at quality 92 stores 0.353. The crop does not change that ratio, only the number of pixels paying it.

Can I crop to an exact size such as 600 × 600? Yes. Type 600 into Width and Height with Free selected, or choose 1:1 and the box takes the largest square that fits.

Why is my output bigger than the file I started with? Quality 92 is probably finer than the original encoding. A 337,057-byte JPEG became 451,506 bytes when the whole frame was re-encoded at 92. Lower the quality or crop tighter.

Does the crop keep transparency? PNG and WebP do. A test cut-out kept an alpha of 0 in the transparent corner and 128 in a semi-opaque centre. JPG has no alpha channel, so transparent areas land on white.

Does it keep the GPS location and the camera data? No. The source had four EXIF entries including GPS; both outputs had none.

Can I crop more than one photo at a time? Not on this page. One photo at a time, up to 40 megapixels, because a full-resolution PNG crop can be tens of megabytes.

What happens to a 3:2 preset on a photo that is not 3:2? It takes the largest centred 3:2 box that fits, then you drag it into place. The ratio stays locked; the position does not.

Does cropping work offline? Yes. The page needs its script once; after that a crop runs with the network off and produces the same bytes.