Most of what makes a photo heavy is resolution, not quality settings. A 4000-pixel-wide phone photo dropped into a 700-pixel column carries roughly 30 times the pixels anyone will see. The Image Compressor attacks both levers at once: a Max Width that scales the image down, and a Quality slider that governs how hard the JPEG encoder squeezes what remains.
Your file is decoded, redrawn onto a canvas at the new dimensions, and re-encoded. No request is made and no copy exists anywhere but the tab, which is what makes it usable on a client photo or an unreleased screenshot. The drop zone says so directly: Supports JPEG, PNG, WebP — processed locally, never uploaded.
Three cards report the outcome once you press the button: the original size in KB, the compressed size, and the change as a percentage. That third card turns red and reads Grew rather than Saved when re-encoding produced a larger file, which happens more often than you would expect.
Getting a Photo Down to a Sensible Weight
- Drag a file onto the dashed panel or click it to open a picker. Hand it something that is not an image and it answers
Please upload a valid image file (JPEG, PNG, WebP). - Set Max Width from the 5 presets: 3840 for 4K, 1920 for Full HD, 1280 for HD, 800 for web, or 400 for a thumbnail. It only ever scales down, so choosing 3840 on a 1600-pixel image changes nothing.
- Drag Quality, which runs from 10 to 100 in steps of 5 and starts at 80. Below about 60 the artefacts around text and hard edges become visible.
- Press Compress Image. Nothing happens until you do, so both controls can be set before any work is spent.
- Read the three cards, check the preview, then press Download. The file is named
compressed- plus a timestamp. If the numbers disappoint, adjust and press the button again.
Supported Formats and What Comes Out
- A PNG source stays a PNG. Because PNG is lossless the encoder ignores the quality slider entirely, and the tool says so on screen:
PNG is lossless — canvas re-encoding ignores this slider for PNG output. Max Width still applies. - Everything else, WebP included, comes out as JPEG. Feed it a WebP with a transparent background and the transparency is gone, because JPEG has no alpha channel.
- An animated source contributes its first frame only. There is no way to keep animation through a canvas re-encode.
- The output line under the preview reports the finished geometry and format together, reading like
Output: 1920 × 1080px · JPEG. - Metadata does not survive. EXIF, GPS coordinates and colour profiles are all dropped by the canvas, which is a privacy win and a colour-accuracy loss.
How Big the Encoder Can Go, and Why Files Grow
- Re-encoding an already-optimised PNG almost always makes it bigger. A tool that ran a dedicated PNG optimiser stripped structure the canvas re-adds, so the third card honestly reports Grew instead of clamping to 0%.
- The same is true of a JPEG saved at quality 60 and re-encoded at 90. Quality settings are not cumulative, and asking for more quality than the source holds only adds bytes.
- Compressed size is derived from the length of the base64 data URL rather than a real file handle, so the KB figure is an estimate accurate to within a byte or two.
- Everything passes through a data URL held in memory. Images beyond roughly 20 MB can exhaust that budget on mobile, where the tab is silently killed rather than shown an error.
- Scaling happens in a single canvas draw. On a very large reduction the browser's own filtering does the smoothing, so fine text can soften more than a stepped downscale would.