How it works

The short version

Your browser is already a capable image processor. Every tool here uses the same three building blocks — decode the image, draw it onto a canvas, encode it again — plus a Web Worker so the page keeps responding while that happens. Nothing is sent anywhere, because there is no code in these pages that sends anything.

Step by step

  1. The file is read locally. You choose it, and the browser hands the page a File object that points at it on your disk. The same object never leaves the tab.
  2. A Web Worker does the work. Decoding a 20 megapixel photo and re-encoding it takes real time, and doing that on the main thread is what makes a page freeze mid-scroll. Each tool hands the file to a worker, which runs in its own thread and reports progress back.
  3. The worker draws it onto an OffscreenCanvas. That is a canvas that exists without being attached to the page, which is what makes it usable off the main thread. It is also the one requirement modern browsers mostly agree on; where it is missing, the tool says so and stops rather than falling back to blocking the page.
  4. It is re-encoded into the format you chose, and the resulting bytes are offered back to you as a download. The original file on your disk is untouched.

Hitting an exact file size

"Compress this to 100 KB" has no formula, because how many bytes an image takes depends on its content. So the compressor searches for the answer: it encodes at the highest quality first, then at the lowest, and then closes in between the two — usually in a handful of attempts. The rule it never breaks is that a result reported as a hit is at or under your target. When the lowest quality still lands above it, you get the smallest file that image will produce plus a note saying how far over the target it was, and lowering the maximum width or height is what usually closes the gap.

A few concrete choices

  • WebP by default. It is typically smaller than JPEG at the same visual quality and it keeps transparency from PNGs. JPEG stays available for maximum compatibility.
  • The ZIP is stored, not squeezed. When a batch is packaged, the entries are written as-is. Deflating files that are already compressed would cost seconds of CPU and save almost nothing.
  • Two images at a time. Batches run with a small concurrency limit on purpose: one large image can occupy tens of megabytes of memory while it is decoded, and starting fifty at once is a reliable way to crash a phone tab.
  • Around 100 megapixels is the ceiling. Beyond that a browser canvas is likely to run out of memory, so the tool refuses early with an explanation instead of failing halfway through.

Checking all of this yourself

Open your browser's developer tools, switch to the Network tab, and run any tool. You should see no requests at all while the image is processed — no upload, no telemetry, no third-party font or script. The page loads its own CSS, JavaScript and icons and that is the complete list.

Last updated .