Image Compressor
Compress JPG, PNG and WebP images for free. Reduce file size without losing visible quality.
Advertisement
Drop images here or click to browse
JPG, PNG, WebP — multiple files supported
Advertisement
How to Use This Tool
Upload Your Images
Upload JPEG, PNG, or WebP images. Batch upload up to 10 images at once. Files never leave your browser.
Adjust Quality
Use the quality slider (1–100) to balance file size and visual quality. The live preview shows the compressed result instantly.
Download
Click Download to save the compressed image, or 'Download All' to get all compressed images in a ZIP file.
Advertisement
Related Tools
Frequently Asked Questions
What quality setting should I use?
Are my images uploaded to a server?
Does compression affect image dimensions?
Which format compresses better — JPEG or PNG?
About Image Compressor
Your marketing team just handed you 40 product photos averaging 6MB each straight out of a Sony a7 mirrorless, and the Shopify theme balks above 20MB total per product page. Or the design lead exported a hero PNG at 14MB because Photoshop defaulted to uncompressed 16-bit depth, and Lighthouse is screaming at you about Largest Contentful Paint. This compressor runs mozjpeg for JPEG, oxipng for PNG, and libwebp for WebP entirely inside the browser via WebAssembly, with a live slider that re-encodes on every quality change so you can watch banding appear in the sky of your landscape shot before it becomes a customer complaint. Drag any JPEG, PNG, or WebP up to roughly 50MB, see the before/after side by side, and read the exact byte delta before you download. Chroma subsampling, progressive encoding, and metadata stripping are all exposed as toggles rather than hidden behind a single quality number, because a product photo for print needs very different choices than a blog thumbnail.
When to use this tool
Shrinking product photos for a Shopify store
Forty DSLR shots at 6MB each need to drop to under 400KB without visible quality loss in the product grid. JPEG at quality 78 with progressive encoding and 4:2:0 chroma subsampling typically lands around 350KB while keeping the packshot crisp at the 800px display width most themes use.
Preparing hero images for LCP optimization
Your landing page hero is a 12MB PNG and PageSpeed flagged it as the LCP element. Convert to WebP at quality 82, strip the color profile and XMP metadata, and the file drops to roughly 180KB — a 98% reduction that typically pulls LCP under the 2.5-second threshold Google uses for Core Web Vitals.
Compressing screenshots for a GitHub issue
A bug report screenshot from your 5K display saves as a 4MB PNG because of the huge pixel count. Run it through oxipng at level 4 and the lossless output drops to around 900KB — small enough to drag directly into a GitHub comment without the upload dialog complaining about size.
Reducing a PDF-bound image before merging
Before feeding an A4-scanned invoice PNG into the images-to-pdf tool, compress it to JPEG quality 85. A raw scan at 300 DPI is often 8MB; compressed it becomes 600KB, which keeps your resulting merged PDF under email-attachment caps like Outlook's 20MB default.
Generating an Instagram-ready export
Instagram re-compresses anything you upload, so there is no point in shipping a 25MB JPEG. Pre-compress to roughly 1080 pixels wide at quality 85 and you match what the platform would produce internally while avoiding the double-compression softness that comes from layering their encoder on top of your source.
How it works
- 1
WebAssembly encoders, not canvas re-draw
We run mozjpeg, oxipng, and libwebp compiled to WebAssembly via the Squoosh codec bundle. Canvas-based compression (the naive approach) re-decodes to RGBA then re-encodes through the browser's built-in JPEG encoder, which produces 20–40% larger files at equivalent quality than mozjpeg's trellis quantization. We skip the canvas path entirely for JPEG and PNG inputs.
- 2
Quality preview without full re-encode flicker
Moving the quality slider fires a debounced encode every 120ms on a Web Worker so the UI thread never blocks. For files over 5MB we downsample to a 1600px preview for the slider feedback and only run the full-resolution encode when you hit Download. This keeps the slider responsive even on a 30MB input where a full encode would take 2+ seconds per step.
- 3
Metadata stripping is opt-in by field
EXIF, XMP, ICC, and thumbnail blocks are listed separately. EXIF often carries GPS coordinates and camera serial numbers you do not want to publish on a blog; ICC profiles are what make a Display P3 photo look correct on a wide-gamut monitor, so stripping them can make colors shift on iPhones and recent MacBooks. We show each block size in bytes so you can decide per-image.
Honest limitations
- · Very large inputs (>50MB) may hit browser memory limits on iOS Safari, which caps per-tab WebAssembly heap around 384MB; desktop Chrome typically handles 200MB+ without issue.
- · AVIF encoding is not included — AVIF produces smaller files than WebP but the browser-side encoder is 10x slower and would freeze the tab on medium-sized inputs; consider a desktop tool like ImageMagick for AVIF at scale.
- · HEIC input from iPhones is not supported because browsers do not ship a HEIC decoder; convert to JPEG on the device first (iOS Files app or Apple's Preview) before uploading.
Pro tips
Quality 75–82 is the sweet spot for photos, not 90
Most people default quality too high. JPEG at 82 is visually indistinguishable from 95 on photographic content for roughly half the file size; below 72 you start seeing block artifacts in smooth gradients like skies and skin. For screenshots, logos, or anything with hard edges and text, stay in PNG or WebP lossless — JPEG at any quality will smear text anti-aliasing. The slider lets you watch the exact threshold your specific image crosses.
WebP beats JPEG everywhere except email signatures
WebP lossy is typically 25–35% smaller than JPEG at the same perceptual quality thanks to VP8 intra-frame prediction. Every modern browser supports it (Chrome since 2010, Safari since 14, Firefox since 65). The one place WebP still loses is Outlook and old email clients, which render it as a broken image icon; for newsletters and signatures stick with JPEG. For websites, serve WebP with a JPEG fallback via the <picture> element.
Strip EXIF before publishing photos from a phone
Smartphones embed GPS coordinates, exact capture time, camera serial, and sometimes a thumbnail that reflects the original (un-edited) frame. Publishing a photo of your home with EXIF intact can literally disclose your address. Enable the Strip EXIF toggle on anything going public. ICC profile is a different story — keep it for photography, drop it only for simple graphics where color fidelity across monitors does not matter.
Frequently asked questions
Why is my compressed PNG barely smaller than the original?
PNG is already losslessly compressed by whatever tool exported it, and the compression ratio depends entirely on the image content. Photographs in PNG format compress poorly (typically 10–20% reduction) because every pixel carries unique noise that cannot be deduplicated; for photos you should convert to JPEG or WebP lossy instead. Screenshots, logos, and flat-color graphics compress well in PNG because of the large runs of identical pixels that oxipng's DEFLATE filters can collapse — expect 40–60% reduction on those. If your source is already from an optimized exporter like Figma or TinyPNG, there is often only a few percent left to squeeze.
Does compression degrade the image every time I run it?
For lossy formats (JPEG, WebP lossy) yes — every re-encode introduces new quantization artifacts because the encoder discards and re-approximates frequency data. Compressing an already-compressed JPEG at quality 85 will look slightly worse than the first compression even if the output file is a similar size; do your compression exactly once, from the original source, and archive the original. For lossless formats (PNG, WebP lossless) re-running the tool produces a bit-for-bit identical image every time because the pixel data is never approximated, only re-packed.
What is chroma subsampling and when should I change it?
JPEG encodes brightness and color in separate channels, and by default the color channels are encoded at half resolution in each direction (4:2:0 subsampling) because the human eye is much less sensitive to color detail than to brightness. For photos, 4:2:0 is fine and saves about 20% file size. For screenshots, infographics, or any image with saturated red or blue text on a contrasting background, 4:2:0 produces visible color fringing around the edges. Switch to 4:4:4 (full chroma resolution) for those cases — the file grows modestly but the text stays crisp.
Are my images uploaded to a server for compression?
No. The compression runs entirely in your browser via WebAssembly. When you drop a file onto the interface, it is read into the JavaScript heap via FileReader, passed to a Web Worker running the mozjpeg or oxipng WASM module, and the compressed output is handed back as a Blob you download directly. There is no fetch or XHR to any origin with the image bytes. You can verify in the browser devtools Network panel during compression — the only network requests should be the initial WASM module download (cached after the first visit) and standard page analytics that never see DOM or file contents.
Why does my image look worse on iPhone than on my laptop?
Almost always because you stripped the ICC color profile. Modern iPhones and recent MacBooks use Display P3, a wide color gamut that contains roughly 25% more colors than standard sRGB, especially in the reds and greens. An image saved with a Display P3 profile is interpreted correctly on those devices; strip the profile and the same pixel values are interpreted as sRGB, which desaturates and cools the colors visibly. Keep ICC profiles on anything photographic and only strip them for UI screenshots and graphics where color fidelity is irrelevant.
Compression is usually paired with resizing — there is no point shipping a 4000px wide photo that renders at 800px in the final layout, so run image-resizer first and image-compressor second. When a compressed image needs to end up inside a PDF invoice or report, images-to-pdf takes the compressed JPEG and embeds it without a second round of lossy encoding. For banner and thumbnail generation workflows where you want to repurpose a single photo across multiple format/size targets, image-converter handles the JPEG/PNG/WebP transcoding in one pass.
Advertisement