Image Compressor

The Image Compressor reduces PNG, JPG, and WebP file sizes by re-encoding them at a quality you control. JPG and WebP at 75% quality typically shrink 50-60% with no visible loss; PNG re-encoding gets a more modest 10-30% reduction (PNG is lossless — the savings come from cleaner re-encoding, not quality loss). Batch supported — drop dozens at once. Unlike TinyPNG, ezgif, and iLoveIMG, your images never upload — every byte stays in your browser. No watermark on the output, no "Pro to remove limit," no 5MB cap.

Built by Bob Article by Lace QA by Ben Shipped

🔒 Everything happens in your browser. Images never upload. Close the tab and they're gone.

How to use

  1. 1

    Drop your PNG, JPG, or WebP images. Up to 50 MB per image, 200 MB combined. Mix formats freely — each gets compressed and re-encoded in its own format.

  2. 2

    Pick a quality level. 75% (the default) is the sweet spot for JPG and WebP — visually identical to source, ~50-60% smaller. Lower quality → smaller files with visible artifacts on text and sharp edges. PNG is lossless so this slider mostly affects PNG output by ~10-15%.

  3. 3

    Click Compress. Each image re-encodes in 1-3 seconds. The per-row size delta shows exactly how much each one shrank.

  4. 4

    Download each individually with the ⬇ button or click "Download all" for sequential downloads. Output names mirror the input with a "-compressed" suffix (vacation.jpg → vacation-compressed.jpg).

Frequently asked questions

Ratings & Reviews

Rate this tool

Sign in to rate and review this tool.

Loading reviews…

What image compression actually is

Image compression is the process of making an image file smaller without (visibly) changing what it looks like. The file you started with — a 4 MB photo from your phone, a 2 MB PNG export from Figma, a 6 MB WebP from a screenshot tool — almost always has more bits than the picture really needs. A compressor re-encodes the same pixels at a different quality setting, drops redundant data, and writes a smaller file that looks identical on a screen.

The Image Compressor handles PNG, JPG, and WebP. It runs entirely in your browser using the canvas API: decode the image into pixels, re-encode at a quality you control, hand you the result. JPG and WebP at 75% quality typically shrink 50-60% with no visible loss. PNG is a lossless format, so the savings there are smaller — usually 10-30% from cleaner re-encoding rather than from quality loss. No upload, no watermark, no 5 MB cap.

How this compares to TinyPNG, iLoveIMG, and Convertio

Three competitors come up most often, and all three make a different trade than we do.

TinyPNG is the famous one. They have a genuinely excellent PNG and JPG compressor built on pngquant and mozjpeg — better than the browser canvas API can produce, especially on PNG. Trade: your image uploads to their server, gets compressed, comes back. Their free tier caps at 5 MB per file and 20 images per batch. Past that, you sign up. If your PNG is a logo or icon and you need every kilobyte squeezed out, TinyPNG produces a smaller file than we do — by maybe 10-20% on PNG specifically.

iLoveIMG compresses server-side too, with a similar upload-then-download flow. They support batch uploads but the free tier caps at 25 MB per file and limits how many compressions per day before you hit a paywall. The compression quality is fine — they use libjpeg-turbo and similar tooling — but it's another round-trip to a server you don't control.

Convertio is the kitchen-sink option: 200+ formats, server-side, with the usual upload-wait-download dance. Strong format coverage, weakest dedicated image quality of the three. Free tier capped at 100 MB total per day and 2 concurrent conversions.

The trade we picked: we do the same compression in your browser using the native canvas encoder. Slower by maybe 1-2 seconds per image (the canvas roundtrip isn't free). Your bytes never leave the tab. No batch limit, no per-day quota, no signup. The output is slightly larger than TinyPNG on PNG specifically — for everything else the difference is negligible.

How to use the Image Compressor

Drop your images. The tool accepts PNG, JPG, and WebP, up to 50 MB per file and 200 MB combined per batch. Mixed formats are fine — each image gets compressed and re-encoded in its own format.

  1. Drop or pick your images. Folder uploads work; a folder of 50 photos goes in at once.
  2. Pick a quality level. 75% (the default) is the sweet spot for JPG and WebP — visually identical to the source, around 50-60% smaller. Lower quality means smaller files with visible artifacts on text and sharp edges. PNG mostly ignores the slider because it's lossless.
  3. Click Compress. Each image re-encodes in 1-3 seconds. The per-row size delta shows exactly how much each one shrank.
  4. Download each individually with the down-arrow button, or click Download all for sequential downloads. Output filenames are the input with a -compressed suffix (vacation.jpg becomes vacation-compressed.jpg).

Every operation is local. Decoding uses the browser's native image loader, re-encoding uses canvas.toBlob(), and the download is a Blob URL. Open the network tab during the compress step — you'll see zero outbound requests.

Picking the right quality level

The quality slider is the single decision that matters. There are four common settings and they each fit a specific job.

QualityJPG/WebP file sizeVisible lossUse case
95% (archival)~80% of originalNone at any zoomKeeping a master copy, professional photography
85% (high quality)~55% of originalNone to the naked eyePosting full-size photos, portfolios, print-quality web
75% (default)~40% of originalInvisible at normal viewing distanceSocial posting, blogs, most web use
50% (aggressive)~25% of originalVisible artifacts on text and edgesEmail attachments where speed matters most, thumbnails

The default of 75% is calibrated for a reason: it's the highest compression where most people can't tell the difference at normal viewing distance. Going lower starts producing visible JPG artifacts — the blocky 8x8 grids around sharp edges, the muddy gradients in skies, the halos around text. If your image has a lot of text or fine line work, stay at 85% or higher.

A worked example with real numbers

Real test: a folder of 12 vacation photos from an iPhone 14, exported as JPGs at full quality. The starting batch is 51 MB total — too big to email, slow to upload to Google Photos.

Quality settingTotal sizeReductionNotes
Source (no compression)51.0 MBiPhone default; way more quality than the screen will ever show
85% JPG28.3 MB45%Indistinguishable from source on any phone or laptop screen
75% JPG (default)21.6 MB58%Still indistinguishable; this is what most people should pick
60% JPG14.2 MB72%Slight softness on close inspection of detailed areas
50% JPG10.8 MB79%Visible artifacts in shadows and on fine detail

At 75% the batch dropped from 51 MB to 21.6 MB — fits comfortably in a Gmail attachment (25 MB cap), uploads to iCloud in a quarter of the time, looks identical on every screen anyone will view them on. That's the right answer for nearly every "I need to share my photos" use case.

Compare against the same batch through TinyPNG: about 19 MB output (12% smaller than ours) with their proprietary mozjpeg-based encoder, after uploading 51 MB to their servers and waiting for the round-trip. For 3 MB of additional savings on a private photo set, the trade isn't obvious.

Why PNG savings are smaller than JPG savings

PNG is a lossless format. The image you decode is byte-for-byte the same as the image you encoded — no quality information is thrown away. PNG's file size depends on how efficiently the encoder packs the data, not on a quality setting.

The browser's native PNG encoder is fine but unremarkable. Dedicated PNG optimizers like pngquant (the engine inside TinyPNG), optipng, and ImageOptim use techniques the browser canvas doesn't — palette reduction, smarter Huffman trees, lossy-but-imperceptible color quantization for 24-bit PNGs. Those tools get 50-70% reduction on a typical PNG. We get 10-30%.

Two practical takeaways:

  • If your image is a photograph saved as PNG, convert it to JPG or WebP first — the savings are 5-10× larger than any PNG optimizer can produce. Our Image Format Converter does this in one click.
  • If your image is a logo, icon, screenshot, or anything with sharp edges and few colors, PNG is the right format. We get a modest size drop. For aggressive PNG-specific compression, TinyPNG or a desktop tool like ImageOptim does better. Use both: us for the privacy-first batch pass, them when you need the last few kilobytes squeezed out of an asset that ships in production.

What happens to transparency, EXIF, and color profiles

A few details matter for specific workflows.

Transparency. PNG and WebP preserve alpha through compression. Pixels that were transparent stay transparent. JPG cannot carry alpha — anywhere a source image is transparent gets painted white before encoding. If you need transparency, compress as PNG or WebP, not JPG.

EXIF metadata. The canvas API strips most EXIF when it re-encodes. Camera model, GPS coordinates, exposure data, lens info — all gone. For most users this is a feature: GPS coords get stripped before you share a photo publicly. For users archiving photography work where EXIF matters, use a tool with explicit EXIF passthrough (jpegtran or ExifTool on the desktop). We could add it later but it's a small audience.

Color profiles. Embedded ICC profiles are stripped during canvas re-encoding. The image displays correctly in any browser (which assumes sRGB by default), but if you're working with prophoto or display-P3 source files for print, the wide-gamut color info won't survive. Photographers and print workflows should use a color-aware compressor.

Animated images. Browser canvas only gives us the first frame of an animated GIF or animated WebP. Compressing the first frame and dropping the animation is rarely what anyone wants, so we exclude animated formats from this tool. For animated GIF or WebP compression, use ezgif or a dedicated tool.

Related image tools

The Image Compressor is one piece of a wider image toolkit:

  • Image Resizer — change pixel dimensions (1920×1080 → 960×540). Often the bigger win for "make this file smaller" — resize first, compress second.
  • Image Format Converter — convert between PNG, JPG, and WebP. If you have a PNG photograph, converting to WebP usually shrinks it more than compressing the PNG ever could.
  • PNG to WebP — specifically for the PNG-to-WebP conversion case. WebP at 80% is typically 60-70% smaller than the source PNG with no visible loss.
  • WebP to JPG — for sharing WebP files with someone whose tool doesn't accept them.
  • Compress PDF — if your real goal is shrinking a document, the PDF version of this tool.

Frequently asked questions

How does this compare to TinyPNG?

Same outcome (smaller image files), opposite trust model. TinyPNG uploads your image to their server and processes it there — fast, but your bytes leave your machine. They have a free tier with a 5 MB and 20-images-per-batch limit, paid plans above. We do the same work in your browser using the native canvas API — slower by maybe 1-2 seconds per image, but your bytes never leave the tab. No batch limit, no file size cap other than 50 MB per file. Both tools are good; pick based on which trade-off you prefer.

Why is PNG compression less dramatic than JPG?

Because PNG is a lossless format — the compression is purely structural (deflate, palette optimization). The browser's native PNG encoder doesn't have the advanced optimizations of dedicated PNG compressors (pngquant, optipng, ImageOptim). For aggressive PNG compression, our tool gets you 10-30%; a dedicated PNG optimizer can get 50-70%. Quick check: if your image is a photograph, convert it to JPG or WebP instead — the savings are 5-10× larger.

Is my image really not uploaded?

Correct. Every operation runs in your browser. Decoding uses the native HTMLImageElement; re-encoding uses canvas.toBlob(). Open your browser's network tab during the compress: zero outbound requests after the page loads. The HTML, CSS, and JS for the page comes from our CDN; your image bytes never leave the tab.

What quality should I pick?

For sharing photos: 75% is invisible to the eye and gets ~50-60% size reduction. For email attachments where speed matters most: 50-60% (visible artifacts on text edges but acceptable for most photo content). For archival: 90-95% (almost no visible loss, smaller savings). For PNG: the quality slider barely matters; pick 100% and accept the modest 10-30% reduction.

Can I batch many images at once?

Yes. Drop or pick multiple files (a folder of 50+ photos is fine). They compress one after the other and you get individual downloads. The 200 MB combined cap protects your browser from running out of memory — for bigger batches do them in chunks.

Does the output preserve EXIF metadata?

Mostly no. The browser's canvas re-encoder strips most EXIF (camera model, GPS, exposure data). If you specifically need EXIF preserved, use a tool that runs a dedicated JPG encoder with EXIF passthrough. For most users (sharing on social, emailing, web upload) the lost EXIF is actually a feature — it strips GPS coords you didn't want to share.

What about transparency?

PNG and WebP outputs preserve transparency through compression. JPG can't carry alpha — anywhere a source image is transparent gets painted white before encoding. To preserve transparency, compress as PNG or WebP, not JPG.

Why are there no animated formats (GIF, animated WebP)?

Browser canvas decoders only give us the first frame of animated images. Compressing the first frame and dropping the animation is rarely what users want, so we exclude animated formats from this tool entirely. For animated GIF or WebP compression, use ezgif or a dedicated tool.