Resize Image

Change an image's width and height, by exact pixels or by percentage. Lock the aspect ratio to avoid stretching, or turn it off for full control.

Resizing for Instagram? Try the 1080x1080 preset.

Click to choose images, or drag and drop them here

JPG, PNG, WebP. Select more than one to resize in bulk. Stays on your device, nothing is uploaded.

Lock aspect ratio
Changing width automatically updates height to match, and vice versa.

Your resized image will appear here once generated.

Exact dimensions stretches or shrinks to the width and height you enter (lock the aspect ratio to avoid distortion). Percentage scales proportionally from the original size. Nothing is uploaded, the resize happens on your device using the canvas API.

How it works

The resize itself is one browser primitive: your image is decoded, a <canvas> is created at the target dimensions, and drawImage() scales the pixels onto it in a single pass. The browser applies its built-in smoothing filter (a bilinear-style resample) while it does this, which averages neighboring pixels instead of just picking the nearest one, so downscaled photos come out smooth rather than jagged. The canvas is then re-exported with canvas.toBlob() as JPEG or WebP at 0.92 quality, or as lossless PNG, depending on the format option.

A few practical truths about scaling that the tool's behavior reflects. Downscaling is where resizing shines: averaging many source pixels into each output pixel keeps photos crisp. Upscaling can't invent detail, the same filter just spreads existing pixels out, so anything past about 2x starts looking soft; if you need a big version, start from the largest original you have. And smooth filtering is wrong for exactly one case, pixel art, where you actually want hard nearest-neighbor edges; a photo tool like this one is tuned for photos.

Percentage mode computes target dimensions from the original size, exact mode takes your numbers, and the lock-ratio toggle keeps width and height tied to the original aspect so people in your photos don't get stretched. Dimensions are capped at 20,000 pixels per side because a canvas bigger than that can exhaust browser memory. Batch mode runs the same canvas pipeline over each file in turn and packs the results into a ZIP that is also assembled in JavaScript.

Because the whole pipeline is decode, draw, re-encode inside your tab, your photos never leave your machine. You can verify this: open DevTools, switch to the Network tab, and resize something. No upload request appears, and the tool keeps working offline.

Common questions

Will resizing distort my image?

Only if you type in a width and height that don't match your original aspect ratio with "Lock aspect ratio" turned off. Leave it on and the other dimension updates automatically to keep proportions correct.

Does resizing reduce file size too?

Usually, yes, since fewer pixels means less data. If you need a specific file size rather than specific dimensions, use the Compress Image tool instead, which targets a byte size directly.

What's the maximum size I can resize to?

Up to 20,000 pixels on each side, limited by what browsers can reliably handle in a canvas element, not by any restriction on our end.

From the blog: AVIF, WebP, JPEG, PNG: Which Format When, in 2026