Skip to content

How it works

What happens to a photo after you drop it into the tool, and which parts of the page do use the network.

The three steps

  1. 1. Decode locally

    Your browser reads the image file straight off your device using createImageBitmap(), a built-in API. This never touches a network request.

  2. 2. Resize and re-encode on a canvas

    The image is drawn onto an in-memory canvas at your requested dimensions, then encoded to your chosen format. For a file-size target, the tool binary-searches the JPG or WebP quality setting. It re-encodes at different quality levels in memory until it finds the highest one that lands at or under your limit. PNG has no quality setting, so a PNG is scaled down instead.

  3. 3. Verify, then hand you the result

    The output's actual format, dimensions, and file size are compared against what you asked for, shown as a pass/fail badge, and offered as a download link. That link is a local object URL (blob:), not a file on a server.

What the page does send over the network

Your image stays in the tab. Other things do travel over the network, and it's fair to list them:

You can check this in the Network tab: the requests are small, and none of them contains your file. The privacy policy covers cookies and local storage. To try it, open the image compressor, or read why this matters most for ID photos in the guide to compressing images without uploading.

Privacy by construction

Nothing you process is ever uploaded.

A lot of online image tools upload your file, work on it on a server, and promise to delete it afterwards. The tools here open the file with your browser's own image APIs and do the work in this tab, whether that's compressing, cropping, or reading pixel colors. The image is never sent over the network, so there's no server copy to keep or delete. That matters most for passport photos, ID scans, and visa forms.

Read how it works

// what happens to the file you add

const bitmap = await createImageBitmap(file);

// decoded in this tab: no fetch(), no upload

ctx.drawImage(bitmap, 0, 0, width, height);

// then resize, crop, or read pixels, depending on the tool

const blob = await canvas.toBlob(format, quality);

// your download is a blob: URL made in this tab

More questions

Is this actually happening on my device, or is that just marketing language?

You can verify it yourself: open your browser's network tab while using the tool, add an image, and process it. You'll see no request carrying your image data — because createImageBitmap() and canvas.toBlob(), the two browser APIs doing the work, never touch the network.

Does that mean my images are stored somewhere on my device permanently?

No. The image lives in the tab's memory and is discarded when you close or refresh the page. It isn't written to a database, cookie, or file unless you click Download. The only thing the tool saves is your last-used settings (such as a 100KB target), in your browser's local storage, so they're filled in next time.

Why do other compressors need to upload my file?

Some rely on server-side codecs or AI-based recompression that isn't available in a browser. For the compress/resize/convert workflow this tool focuses on, modern browsers' built-in image codecs are capable enough to do the whole job locally, so there's no technical reason left to route your file through a server.

Why was my upload rejected for being “too large” on another site?

Portals cap upload size to keep storage and page loads under control, and many only show the limit after an upload fails. Common caps are 20KB, 50KB, 100KB, and 200KB. If you don't know the exact number, start with the nearest of those and adjust if it's rejected again.