Skip to content

Compress a JPEG to 100 KB

Re-encode a JPG to fit a 100 KB limit using the MozJPEG encoder in WebAssembly, with the quality setting chosen by measurement, not guesswork.

  • Runs in your browser
  • Files are never uploaded
  • Free, no account
Drop the JPG files you need at 100 KBAdd as many as you like — every encode runs on your own CPU, so the retry loop costs nothing.JPG, JPEG, PNG, WEBP, AVIF, GIF, BMP · up to 200 MB each
Target size
We aim 2% under the limit, because upload forms compare against a hard byte ceiling.

1 KB = 1024 bytes, the same arithmetic your operating system uses.

Only kicks in when quality 5 still overshoots.

Which encoder does the work

This page uses MozJPEG, compiled to WebAssembly and running inside your browser. It is the same encoder used by professional image pipelines, and it differs from the one built into your browser in ways that matter when the budget is fixed: trellis quantisation chooses coefficients that cost fewer bits for the same visual result, progressive scan scripts are optimised per image, and the Huffman tables are rebuilt rather than taken from a default. In practice that is 5–15% smaller for the same apparent quality — which, at a 100 KB ceiling, is the difference between quality 68 and quality 76.

Generation loss: the one rule that matters

JPEG splits the image into 8 × 8 blocks, converts each to frequency coefficients and rounds them. Decoding and re-encoding rounds coefficients that were already rounded, so the errors compound: edges gain halos, flat areas develop blotches, and colour bleeds across block boundaries. Saving the same photo ten times at quality 80 looks dramatically worse than saving the original once at quality 40.

So: always start from the highest-quality copy you have — ideally straight off the camera or the phone — and never feed a compressed result back in for a second pass. If the output is not good enough, change the crop or the target, not the number of generations.

How the target is hit

  1. Encode at quality 92 and measure. If it already fits, that is your file.
  2. Otherwise binary-search the quality range: encode at the midpoint, keep it if it fits and raise the floor, drop the ceiling if it does not.
  3. After nine or ten rounds the range is one quality point wide; the best passing encode wins.
  4. If even quality 5 overshoots, search the pixel dimensions instead with a Lanczos3 resample.

Every step is listed in the result card with its byte count, so you can see how steeply size falls with quality for your specific photo — which is far more informative than any generic quality table.

Why two JPEGs at 100 KB can look completely different

SubjectHow it compressesQuality typically reached at 100 KB
Studio portrait, plain backdropExcellently — large smooth areas85–92
Product on whiteExcellently85–92
Street sceneModerately65–78
Trees, grass, waterBadly — high-frequency detail everywhere45–60
High-ISO night shotWorst case — noise is incompressible35–50

If your photo falls in the bottom rows, the fix is not a better encoder — it is fewer pixels. Crop tighter or cap the width, and the same 100 KB suddenly buys a much higher quality setting.

Chroma subsampling, briefly

JPEG stores brightness at full resolution and colour at half, because the eye is far more sensitive to the former. That is why red text on a dark background looks fringed in a JPEG and why screenshots belong in PNG. It is also why converting a JPEG screenshot to PNG afterwards does not repair anything: the colour detail was discarded at the first save.

Everything runs on your machine

Ten to eighteen full encodes of a large photo, in under a second, with no upload — that is what makes an exact byte target practical. A server-based compressor would need a round trip per attempt, which is precisely why those services offer a slider and a daily quota instead of a target. Nothing about your photo, including its EXIF and GPS data, leaves this tab; the metadata is dropped entirely as a side effect of re-encoding from pixels.

Related

Compress any image to 100 KB · PNG at 100 KB · JPG to WebP for a smaller file at the same quality · any target you type.

Questions

What encoder is used?

MozJPEG, compiled to WebAssembly and running in your browser. It typically produces files 5–15% smaller than the browser’s own JPEG encoder at the same visual quality, which matters a great deal when the budget is fixed at 100 KB.

Does re-encoding a JPEG lose quality?

Yes — a JPEG is decoded to pixels and re-quantised, so a second generation of loss is unavoidable. Start from the highest-quality copy you have rather than from an already-compressed file, and never run the same file through twice.

Why is my 100 KB result blurrier than someone else’s?

Content decides. Flat backgrounds and studio portraits compress enormously; foliage, water, textured fabric and film grain barely compress at all. The same 100 KB buys very different sharpness for different pictures.

Can it output WebP instead?

Yes, change the output format. WebP will hold noticeably more detail at 100 KB — only stay with JPG if the site you are uploading to insists on it.