IGCOMPRESSOR is a short pipeline that runs inside your browser. This page describes every step, including the numbers, so you can judge for yourself whether it does what you need. Nothing here is proprietary; the value is in the order and the defaults.

1. Decode on your device

When you drop a file, the browser decodes it with its own image engine. JPEG, PNG, WebP and GIF work everywhere; HEIC works in Safari, which decodes it natively; camera RAW files are handled by loading a small open-source decoder on demand that extracts the full-size preview embedded in the RAW. Orientation from the EXIF data is applied, so portrait shots come out upright.

Decoding happens in a Web Worker when the browser supports it, so the page stays responsive during a 50-photo batch. There is no upload step because there is no server that accepts images. You can confirm this in the browser's Network tab, or by switching Wi-Fi off after the page has loaded.

2. Crop to the target ratio

Each preset has a shape: 4:5 for an Instagram feed post, 9:16 for a story, 16:9 for a YouTube thumbnail, 200×230 for a bank form. The tool crops the source to that shape first, around the point you choose by dragging the preview. Cropping before resizing matters because it means the resize only has to do one job, and because you see the crop before the platform decides it for you.

Fit-within presets (WhatsApp, Telegram, email) skip the crop and only scale the photo to fit inside a box.

3. Resize in steps

Shrinking a 6000 px photo to 1080 px in one jump with a basic filter throws away detail unevenly. The tool halves the image repeatedly while it is more than twice the target size, then does the final resize with the browser's highest-quality filter. The result is closer to what Lightroom or Photoshop produce than to what a typical web resizer does. Upscaling is only used for form presets that require exact pixels.

4. Sharpen after the resize

Any downscale softens edges slightly. The tool applies an unsharp mask with a one-pixel radius on the final pixels, with an amount that varies by preset (0.4 for Instagram feed posts, 0.35 for stories, 0.2 for form photos). Sharpening before the resize would be wasted; this is the single step people most often get in the wrong order.

You can change the amount under More options: Off, Light, Medium (the preset default) or Strong. Check the result with the Compare button at 1:1 zoom.

5. Find the right file size

JPEG quality is not a linear thing. The tool encodes the image at a quality of 95, checks the size, and if it is over the target it binary-searches downwards, up to seven encodes, until the file lands just under the cap and as close as possible to the target. It never goes below quality 35. If even that is too large for the cap, it reduces the pixels slightly and searches again; this only happens in the exact-size mode with very small caps.

For Instagram the target is between 500 KB and 1 MB, aiming at roughly 850 KB for a 1080×1350 image. That range comes from a lot of trial and error: smaller files show blocky artifacts after Instagram's own re-encode, and larger files tend to be compressed harder.

For forms that require a minimum size, the tool can pad the JPEG with a harmless comment segment so the file is never rejected as too small. The pixels are untouched.

6. Export

The output is a baseline JPEG in sRGB with no EXIF data, or WebP or PNG if you choose them. Metadata removal is deliberate: your location, camera serial number and the embedded thumbnail (which can be an older, uncropped version of the photo) stay on your device.

On a phone, the Share button hands the file to the system share sheet, so it can go straight into Instagram, WhatsApp or a form without a detour through the downloads folder. Batches can be downloaded as a ZIP, which is also assembled in the browser.

What the tool cannot do

It cannot stop a platform from re-encoding your upload. Instagram, Facebook, WhatsApp and the others always run their own compression. What a correctly prepared file does is give that compression nothing else to do: no resize, no crop, no colour conversion, and a JPEG that is already in the range they tolerate. That is the whole trick, and it is why the result looks like what you uploaded.

It also cannot recover detail that was already lost. A photo that came through WhatsApp at 1600 px will not become a sharp 4K image. Start from the original whenever you can.

Try it on your own photoSocial-ready photos, smaller files, nothing uploaded
Compress a photo