Optimize image
Resize, compress, and convert one static JPEG, PNG, or WebP without uploading it.
Source image
JPEG, PNG, or WebP · 25 MB maximum
Choose an image
The original stays unchanged.
No file-count limit, no daily limit, no queue — the work happens on this machine. Choose one file for the usual single-file flow, or select many for batch results and one ZIP.
Sends these settings only. Your file stays on this device and is never part of the link.
About this image optimiser
Choose one image or several, set a maximum width and height, pick an output format and a quality, and optimise. The image is drawn onto a canvas at the new size and re-encoded by your browser, the saved bytes are decoded again to confirm the dimensions came out as planned, and the panel reports the real before and after sizes. Several images at once are processed one after another and offered as a single ZIP.
This does three things in one pass — resize, re-encode and convert — on JPEG, PNG and WebP up to 25 MB each. Resizing is contain-only and never upscales: the width and height you give are a box the image is fitted inside, so a 4000 by 3000 photograph capped at 1200 by 1200 comes out 1200 by 900, and a 640 by 480 image capped at 1200 stays 640 by 480. WebP is the default output because it is usually the smallest of the three at the same visual quality. The tool does not copy the original file’s metadata into the result, and it says so on the receipt rather than leaving you to discover it: animation, embedded profiles and edit history are not preserved.
Step by step
- 1Choose one image, or manyJPEG, PNG or WebP, up to 25 MB each. One file opens the single editor; two or more switches to batch mode, which runs them in sequence and names any file it could not read without stopping the rest.
- 2Set the box to fit insideMaximum width and height, from 1 to 12,000 pixels. They are filled in for you from the image’s own size, capped at 2400. The image is scaled to fit inside the box with its proportions kept, and never enlarged.
- 3Pick a format and a qualityWebP, JPEG or PNG. Quality runs from 10 to 100 and starts at 82; it is disabled for PNG, which has no quality setting. JPEG output is drawn onto a white background first, because JPEG cannot carry transparency.
- 4Optimise, then read the real numbersThe panel shows the true before and after sizes, the finished dimensions, how long it took and the percentage saved — or the percentage larger, when re-encoding made the file bigger, which it honestly reports rather than hiding.
Why the size you ask for is a box, not a target
Every resize has to decide what happens when the shape you ask for does not match the shape of the image. Stretching distorts it; cropping throws part of it away; fitting inside keeps everything and leaves the result smaller than the box on one axis. This tool fits inside, always, and it never enlarges.
That is the right default for the job people actually have — an image that is too large for a page, an email or an upload, and needs to be smaller without being mangled. It also means you can set the same box for a folder of images of different shapes and get a consistent maximum dimension out of all of them, which is what a batch is usually for.
If you need exact pixels rather than a maximum, the exact-size tool on this site takes a width and a height and will crop, pad or stretch to hit them precisely — and will also hit a file-size ceiling in KB at the same time.
Choosing between WebP, JPEG and PNG
WebP is usually the smallest at the same visual quality and is supported by every current browser; it is the default here. Its drawback is that some older software still will not open it, so it is the wrong choice for a file someone will open in a desktop application you cannot predict.
JPEG is the safe universal choice for photographs, and the one to pick when the file is going into something old or unknown. It cannot carry transparency, so this tool fills the canvas with white before drawing when you choose it — that is why a transparent PNG converted to JPEG comes out with a white background rather than a black one.
PNG is lossless, which is why the quality slider is disabled for it. Use it for screenshots, diagrams, line art and anything with sharp edges or flat colour, where JPEG artefacts are visible and the file is often smaller in PNG anyway. Use it for photographs only when you genuinely cannot lose anything, because a photographic PNG is very large.
What the dimension check is for
After the browser encodes the result, the saved bytes are decoded again and the width and height read back out and compared with what was planned. A mismatch fails the run rather than offering the file.
This catches a real class of browser failure. Canvas encoding is the browser’s own code, and it can silently produce something other than what was asked for — a different format, or a size that hit an internal limit. The receipt therefore reports "dimensions match" as a measured fact, and where the browser substituted a format it names the format you actually got instead of labelling the file with the one you asked for.
Why the images never leave the tab
Every response from this site is served with a Content Security Policy whose connect-src directive is set to none. That is an instruction to your browser rather than a promise in marketing copy, and the browser is what enforces it: while this page is open it cannot open a connection to anywhere, so there is no route by which your image could be uploaded. e2e/egress-proof.spec.ts asserts the served header and then attempts to send data out by every path a page has — including a real image through a real tool — and requires every attempt to be refused. It runs on every build.
This page is the one the egress proof is run against, so the assertion is not a general claim about the site but a measurement taken here: a real PNG handed to this tool produces no request carrying a body, the file name never appears in a request URL, and every off-origin resource transfers zero bytes.
The other half of it is that the code has nowhere to send anything from. lib/tools/local-source-policy.test.ts reads every source file under lib/tools, workers, components and app on every test run and fails if any of them contains fetch, XMLHttpRequest, WebSocket, EventSource, sendBeacon or a peer connection, or even a remote address written in a comment. An upload cannot be added here by accident, because the file that would contain one cannot be committed.
Questions people ask
- Will it make my image bigger than it was?
- It never enlarges the pixels — the width and height you set are a box to fit inside, so a small image stays its own size. The file can occasionally come out larger in bytes, usually when a heavily compressed JPEG is re-encoded at a high quality, and the receipt says so in as many words rather than reporting a negative saving as a positive one. Lower the quality or keep the original in that case.
- Which formats can I use, and what are the limits?
- JPEG, PNG and WebP going in and coming out, up to 25 MB per file, with width and height from 1 to 12,000 pixels and quality from 10 to 100 for the lossy formats. HEIC, AVIF, TIFF, GIF and SVG are not accepted. There is no limit on how many images you can run.
- Does it keep my EXIF data and colour profile?
- No. A new image is encoded by the browser from the pixels, so the original metadata is not copied — no camera settings, no GPS, no embedded profile and no edit history. Keep your original if you need any of it. If stripping metadata is the point rather than a side effect, the photo metadata tool on this site removes it without re-encoding the picture at all.
- Can I do a whole folder at once?
- Yes. Choose two or more files and the page switches to batch mode, running them in sequence with the same settings and offering every result in a single ZIP. A file it cannot read is named and marked failed, and the rest of the batch carries on — a test in this repository puts a deliberately corrupt file in the middle of three and requires the third to still be processed.
- Why did my WebP come out as a PNG?
- Because your browser answered the request for WebP with something else — WebKit does this in some versions. Rather than name the file .webp when it is not, the tool reports the format the browser actually produced and saves it with the matching extension. The picture is intact; only the format differs from the one you asked for.
- Is there a watermark, a sign-up or a queue?
- None of them. There is no account, no email step and no cap on runs, and nothing is added to the output. The work happens on your computer, so there is no per-image cost for anyone to recover.