Skip to main content

Compress image to 100KB

Give it a ceiling, not a quality number. The encoder quality is binary-searched and the image is downscaled when quality alone cannot get there, and the size you see is the size you download.

No watermarkFree & unlimited
Target file size
Output format

PNG is not offered here: it is lossless, so there is no quality knob to search.

When quality is not enough

Keeping resolution can make small targets unreachable on large photos — it will say so rather than guess.

Nothing is uploaded. The file is decoded by createImageBitmap in this tab, drawn onto a canvas, and re-encoded with canvas.toBlob once per search step — all on your own CPU. The download link points at a blob: URL in the same tab. No server, no Pages Function, no model download.

Most compressors give you a quality slider and let you guess your way to a file size. This one works the other way round: 100 KB is the input, and the settings are the output. The image is decoded in this tab, drawn onto a canvas, and re-encoded up to a dozen times while a binary search closes in on the highest quality that still lands under 102,400 bytes. If quality alone cannot get there — and on a modern phone photo it usually cannot — the tool steps down a resolution ladder and searches again, because 675x450 pixels at quality 0.7 looks far better than 1500x1000 pixels at quality 0.06 for the same 100 KB. The number you see at the end is measured from the finished blob, not estimated from a formula.

Key facts about Compress image to 100KB

Key facts about Compress image to 100KB
What 100 KB means here102,400 bytes — a binary KB ceiling, checked against the encoded blob's real byte length
How the setting is found10-step binary search over the encoder quality parameter between 0.05 and 0.95, at each resolution rung
Measured examplea 1500x1000 noisy photo of 1.29 MB lands at 101,724 bytes as JPEG — quality 0.56 at 1005x670
Same photo as WebP102,342 bytes at quality 0.69 and 825x550 — WebP buys quality, not pixels, at this ceiling
Resolution ladder13 rungs from 100% down to 8% of the longest side; each rung is ~0.82x the previous one
Quality comfort floorthe search keeps shrinking until quality reaches 0.55, or four rungs pass, or the longest side hits 400 px
PNG is not offeredPNG is lossless, so there is no quality parameter to search — only resolution, which is a different tool
Already under 100 KBif the file is already smaller and already the chosen format, it is returned byte-for-byte untouched
Batchup to 20 images per run, each searched independently — a 300 KB screenshot and a 6 MB photo get different settings
Typical encode count11 canvas encodes on one rung, 33-55 when the search walks down two to four rungs
Speedabout 200 ms per JPEG search and 0.8-1.5 s per WebP search on a desktop browser
When it failswith resolution locked and a target far below what the encoder floor can produce, it reports the miss instead of shipping an oversized file

What happens to your file

Nothing is uploaded and nothing is downloaded from a CDN. Your image becomes a blob in this tab, createImageBitmap decodes it with the browser's own decoder, a canvas element receives the pixels, and canvas.toBlob re-encodes it once per search step — every one of those is a browser API running on your own CPU. There is no Pages Function, no API endpoint and no WASM model fetch on this page. The result you download is a blob: URL pointing at memory in the same tab, and closing the tab discards it. Because the search runs locally, the tool also cannot keep a copy: there is nowhere for it to keep one.

About this tool

  1. 1

    Confirm the ceiling

    The page opens on 100 KB. The presets and the custom field are there because the same search works for any ceiling, but 100 KB is what this page is tuned and titled for.

  2. 2

    Pick JPEG or WebP

    JPEG is universally accepted by upload forms. WebP holds more detail at the same byte count, so choose it when the destination accepts it — on the test photo it kept 825x550 where JPEG had to drop to 1005x670 at lower quality.

  3. 3

    Decide whether resolution may move

    Downscale too is the default and is what makes small ceilings look acceptable. Keep resolution locks the pixel dimensions and lets quality take the whole hit — use it when the destination checks dimensions.

  4. 4

    Drop in up to 20 images

    Each file is searched on its own, so a batch of mixed sizes does not get one compromise setting applied to all of it.

  5. 5

    Press Compress and read the achieved size

    The result strip shows the target, the achieved bytes, the original, and the quality and pixel dimensions the search settled on. Green means under the ceiling.

  6. 6

    Save the file

    Each row has its own Save link. The filename carries the target, so photo.jpg becomes photo-100kb.jpg and you can tell the compressed copy from the original in a downloads folder.

Specs & compatibility
Accepted inputJPG, PNG, WebP, BMP, GIF, AVIF, TIFF and HEIC/HEIF (converted to JPEG first by heic-to)
Output formatsJPEG or WebP only — the two canvas encoders that take a quality parameter
Per-file ceiling50 MB, the shared image cap; the real limit is the canvas, which stops near 16,384 px a side in Chromium
Batch size20 files per run
Target range5 KB to 20,000 KB via the custom field; 20, 50, 100, 200 and 500 KB as one-click presets
Transparencyalpha is composited onto white before encoding, because JPEG has no alpha channel
WebP supportChrome, Edge, Firefox, Safari 14+; if the browser silently returns a PNG instead, the tool raises an error rather than reporting a wrong size
Offlineworks with no network once the page has loaded
Account or installnone — no signup, no watermark, no per-day cap
  • If the achieved size comes back well under 100 KB, the search hit the top of its quality range — the image was easy, and there is nothing left to gain.
  • Screenshots and flat graphics reach 100 KB at high quality without any downscale; photographs of foliage, gravel or crowds are the hard cases because fine noise is expensive to encode.
  • Upload forms that say 100 KB almost always mean 100 x 1024 bytes, which is what this uses; a handful mean 100,000 bytes, so set the custom field to 97 KB if a form still rejects the file.
  • Turn off Downscale too only when the destination validates pixel dimensions — otherwise you are forcing the encoder to destroy detail it did not need to.
  • Crop before compressing. Removing a dead border takes bytes away without touching a single remaining pixel's quality.
  • For a batch of product shots, run once at 100 KB with WebP and once with JPEG and compare the two result strips — the quality figures make the trade-off explicit.
  • Binary search on encoder quality, not a guessed slider
  • Automatic downscale ladder when quality alone cannot reach
  • Measured achieved size, never an estimate
  • JPEG and WebP output with a verified MIME type
  • Batch of 20, each file searched independently
  • Honest could-not-reach state instead of an oversized file
  • Meeting the 100 KB per-image ceiling that many CMS and forum upload forms enforce.
  • Getting a set of product photos under a marketplace's per-image limit without hand-tuning each one.
  • Preparing hero images for a page-speed budget where 100 KB is the agreed cap per asset.
  • Attaching several photos to an email that bounces above a total size.
  • Fitting scanned supporting documents into an application portal that rejects anything larger.
  • Cutting a folder of phone photos down before syncing them to a device with little storage left.
Because at 100 KB that is the better trade. Quality and resolution both cost bytes, and below roughly quality 0.3 a JPEG stops looking like a slightly softer photo and starts looking like 8x8 blocks with halos around every edge. When the search finds that the only way to hold the original pixel count is a quality figure in that range, it steps down one resolution rung and searches again, up to four rungs. On the 1500x1000 test photo that produced 1005x670 at quality 0.56 instead of 1500x1000 at quality 0.18. If you need the pixel dimensions preserved, switch the second control to Keep resolution and it will not downscale at all.
This tool uses 102,400 bytes, the binary kilobyte, which is what operating systems and almost every upload form mean by KB. The achieved figure shown in the result strip is the encoded blob's exact byte length, so you can always check. If a form still rejects a file that this tool says is 99 KB, it is one of the rare ones counting decimal kilobytes — set the custom target to 97 KB and run it again.
PNG is lossless. Its encoder has no quality parameter to search: the same pixels always produce the same bytes. The only lever left would be resolution, which makes it a resizer rather than a compressor, and it would produce a much worse-looking file than JPEG or WebP at 100 KB. If you specifically need a PNG under a size limit, resize it first and accept whatever size comes out, or convert to WebP, which is lossless-capable and much smaller.
No. The size check is a property of a Blob object in this tab: after canvas.toBlob returns, blob.size is the exact byte length, available immediately and locally. That is the whole reason a target-size search is practical in a browser — each candidate can be measured in a millisecond without a round trip. There is no server involved on this page at any point, and no CDN fetch either; unlike the video tools, the image path needs no WebAssembly engine.
Up to 20 files per run. Each one gets its own independent search, so a 300 KB screenshot that reaches 100 KB at quality 0.9 and a 6 MB photo that needs a downscale both end up under the ceiling with settings appropriate to them. Batches are processed one file at a time so a large set does not exhaust memory on a phone, and each finished row gets its own Save link as soon as it is done.
You get told. The tool returns the smallest file it managed, marks the run as a miss in amber rather than green, states the size it actually reached, and suggests what to change — usually enabling the downscale ladder if you had locked resolution, or cropping. It never hands you a file that is over the ceiling while implying it is under; that would waste your time at the upload form instead of here.
View all

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy