ExactSize

Resize image to 20 KB: ten files, ten limits, measured

There is no batch queue. The tool takes one file per pass, because everything happens inside the page and there is no server to hold a queue — so ten files at 20 KB is ten passes, not one click. Measured on a real ten-file folder, the six files given a 20 KB limit came back at six different sizes, from 189 × 189 to 1,545 × 773 pixels, and every one of them landed between 20,171 and 20,446 bytes — inside the 20,480-byte ceiling by as little as 34 bytes. The whole folder went from 6,498,903 bytes to 479,962 in 9.6 seconds of encoder time. The part that surprises people: you never choose the dimensions. You type 20 into the target field and the width and height come back as a consequence.

What a ten-file 20 KB pass actually produces

  • One limit, six different answers. Six files at 20 KB returned 189 × 189, 630 × 472, 968 × 646, 1,125 × 633, 1,218 × 685 and 1,545 × 773 pixels. The 33-fold spread in pixel count comes from how much detail each picture carries, not from the limit.
  • Every output stopped within 34 to 309 bytes of the ceiling. That is tight enough to be useful and tight enough to be dangerous: if the form in front of you means 20,000 bytes rather than 20,480, all six of these files are rejected. Re-run at 19 KB and they land at 19,115 to 19,411 bytes, costing 4.2% to 7.5% of the pixels.
  • One file was never touched. A 2,048-byte PNG icon came back byte-identical at 512 × 512 in 0 ms. The tool does not enlarge a file to fill a budget, and it does not re-encode one that already fits.
  • The same input gives the same bytes. Two files were run twice; both returned identical dimensions and identical byte counts. Re-running a lost output is safe.

Every figure on this page is what the tool printed in its own verdict line for these ten files. Nothing is estimated from a formula.

How these numbers were measured: a local copy of this site's own tool, driven in Chrome 155.0.8059.80 on Windows 11 on 21 October 2026, one file per pass, output format set before the target. The ten files were built for the test so that each one is a different kind of picture — a 2592 × 1944 camera JPEG and a 4000 × 6000 camera JPEG, plus a dark UI screenshot, an A4 text scan at 300 dpi, a logo with an alpha channel, a product shot on white, a noisy night frame, a flat bar chart, a 512 × 512 icon and a gradient banner. Times are the tool's own "Done in … ms" figure, one run per file except where a repeat is stated. This page is about running a folder; the question of how many pixels a 20 KB budget holds for each kind of picture is the content-type table on the 20 KB page.

The folder, and the limit each file was given

Ten files from one folder do not arrive with one limit. They arrive with ten, because each one is going somewhere different — a job application, a marketplace listing, a support ticket, a print order. So the run below assigns a limit per file, which is the thing a single "compress all" button cannot do.

File What it is Source px Source bytes Limit Output format
photo-2592x1944.jpgcamera photo2592 × 1944926,32820 KBJPG
bt-shot-1920x1080.pngdark UI screenshot1920 × 108083,10120 KBJPG
bt-scan-2480x3508.pngA4 text scan, 300 dpi2480 × 3508944,090100 KBJPG
bt-logo-1200x1200.pnglogo with alpha1200 × 120090,95620 KBPNG
bt-product-2000x2000.jpgproduct on white2000 × 2000117,63250 KBJPG
bt-night-3000x2000.jpgnight frame, noisy3000 × 2000689,29920 KBJPG
bt-chart-1600x900.pngflat bar chart1600 × 90028,60520 KBJPG
bt-icon-512x512.pngicon already under limit512 × 5122,04820 KBPNG
bt-banner-2400x1200.jpggradient banner2400 × 1200124,16620 KBJPG
big-photo-4000x6000.jpg24 MP original4000 × 60003,492,678200 KBJPG

The limit column is what each file's destination asked for, not what the file needed. Six of the ten were 20 KB because that is the number most forms still print.

What came back, file by file

Read the output columns, not the source columns. The source sizes tell you nothing about what 20 KB will give you: the 28,605-byte chart and the 926,328-byte photograph both asked for 20 KB and came back 712,125 pixels and 297,360 pixels respectively. The chart started smaller than the photograph by a factor of 32 and still ended up with 2.4 times the pixels.

File Output px Output pixels Output bytes Under limit by Pixels kept Bytes / px Quality Time
photo-2592x1944.jpg630 × 472297,36020,214266 B5.9%0.068040%657 ms
bt-shot-1920x1080.png1,218 × 685834,33020,39387 B40.2%0.024441%644 ms
bt-scan-2480x3508.png731 × 1,035756,585101,415985 B8.7%0.134140%1,308 ms
bt-logo-1200x1200.png189 × 18935,72120,171309 B2.5%0.5647lossless84 ms
bt-product-2000x2000.jpg2,000 × 2,0004,000,00050,972228 B100%0.012776%635 ms
bt-night-3000x2000.jpg968 × 646625,32820,38595 B10.4%0.032640%677 ms
bt-chart-1600x900.png1,125 × 633712,12520,44634 B49.5%0.028741%518 ms
bt-icon-512x512.png512 × 512262,1442,04818,432 B100%0.0078untouched0 ms
bt-banner-2400x1200.jpg1,545 × 7731,194,28520,44436 B41.5%0.017140%973 ms
big-photo-4000x6000.jpg1,447 × 2,1703,139,990203,4741,326 B13.1%0.064840%4,119 ms

Bytes per pixel is output bytes divided by output pixels — one sampling point, so the column compares like with like. The PNG row's 0.565 is not an error: lossless storage costs far more per pixel than JPG at 40%, which is why 20 KB buys only 189 × 189 there.

Two files kept every pixel they started with. The icon was never re-encoded at all. The product shot was re-encoded and kept 2,000 × 2,000 at 76% quality, because a subject on a white background has very little for the encoder to spend bytes on — its source file was only 117,632 bytes to begin with, so a 50 KB ceiling still left room for the full frame.

Why the same 20 KB holds 33 times more pixels in one file than another

The six 20 KB outputs sorted by pixel count run from 35,721 to 1,194,285. Leave out the lossless PNG and the JPG outputs alone still span 297,360 to 1,194,285, a factor of four. The mechanism is the tool's trade-off rule, and it is the same rule for every file in the folder: hold the pixel dimensions and let quality fall, but only to 40%; below that, shrink the picture instead, because a smaller sharp picture beats a full-size mush.

That rule explains the ordering. The gradient banner and the flat chart have almost no high-frequency detail, so they hit 40% quality while still at 64% and 70% of their original dimensions. The camera photograph and the night frame are texture all the way through, so they reach the 40% floor almost immediately and then lose pixels — 24% and 32% of the original, ending at 5.9% and 10.4% of their pixel counts. Nothing about the limit changed between them.

The one number that does travel with content is bytes per pixel. At 40% quality the photograph cost 0.068 bytes per pixel, the night frame 0.033, the screenshot 0.024, the banner 0.017. If you want to predict what 20 KB will give you before you run it, that column is the predictor — not the source file size. The same measurement across five content types at a fixed 20 KB target is on the 20 KB pixel-budget page, and the PNG side of it, where lossless storage costs 0.565 bytes per pixel, is on the PNG page.

The one file that was never compressed at all

The 512 × 512 icon is 2,048 bytes and its limit was 20 KB. The tool returned it untouched: same dimensions, same 2,048 bytes, "Done in 0 ms", with the verdict line saying the file was already inside the limit and already PNG, so it was passed through. That is worth knowing before you run a folder, because it changes the order you should work in — the files that need nothing cost nothing, and running them first tells you which files are actually work.

Two conditions have to hold for that shortcut: the file must already be smaller than the target, and it must already be in the output format you selected. Ask for JPG output from a small PNG and the shortcut does not apply — the tool re-encodes, because you asked it to change the format. It also never goes the other way: a 2 KB file is not enlarged to fill a 20 KB budget, and its dimensions are not scaled up. The target is a ceiling, not a quota.

Run the same file twice and you get the same bytes

Two files in the folder were run a second time, from a fresh page load, at the same 20 KB limit. This is the whole result:

File First pass Second pass Same bytes? Time, 1st / 2nd
photo-2592x1944.jpg630 × 472 · 20,214 B630 × 472 · 20,214 Byes657 / 330 ms
bt-night-3000x2000.jpg968 × 646 · 20,385 B968 × 646 · 20,385 Byes677 / 613 ms

Identical dimensions and identical byte counts on both files. Only the clock moved.

Practical consequence for a folder: if one output goes missing or gets overwritten, re-running that file reproduces it exactly. You do not need to keep a copy of every output to keep the set consistent — though you should keep the originals, since the tool writes a new file and never modifies the one you gave it.

Where the ten passes went

The ten passes took 9,615 milliseconds of encoder time in total, an average of 961 ms per file. The spread is wide: 0 ms for the untouched icon, 84 ms for the lossless PNG, 4,119 ms for the 24 MP original at 200 KB. Two things drive it, and the limit is only one of them.

Source pixels are the first. The 24 MP file took 4.1 seconds; the 5 MP photograph took 0.66. Output bytes are the second, and it is easy to miss: the same 24 MP file at a 20 KB limit took 2,090 ms rather than 4,119 ms, because the search settles on a much smaller canvas and every trial encode is cheaper. So a tight limit on a huge file is not automatically the slow case — a generous limit on a huge file is.

The format decides how many encodes the search has to do. JPG and WebP search resolution and then search quality, roughly 17 trial encodes; PNG is lossless, so quality is not a dial and the search is resolution only. The clean comparison is two files with the same 1.44 megapixels of source: the flat chart, saved as JPG, took 518 ms, and the logo, saved as PNG, took 84 ms. Same pixels in, six times the time out, purely because of the format.

At the measured average, a folder of 100 files at 20 KB is about 96 seconds of waiting — arithmetic from the ten-file average, not a measurement of 100 files. It is a coffee-break job, not an afternoon.

One limit for the whole folder: what it costs

Every bulk compressor has one target for the whole batch. That is fine if every file is going to the same form, and expensive if it is not. Two files from this folder were re-run at 20 KB to price the difference:

File At its own limit Forced to 20 KB Pixels lost
bt-scan-2480x3508.png731 × 1,035 · 756,585 px · 101,415 B (100 KB)336 × 475 · 159,600 px · 20,411 B78.9%
big-photo-4000x6000.jpg1,447 × 2,170 · 3,139,990 px · 203,474 B (200 KB)452 × 679 · 306,908 px · 20,341 B90.2%

Same files, same output format, only the limit changed. The scan loses 79% of its pixels and the 24 MP photo loses 90%.

A page of body text at 336 × 475 is a thumbnail, not a document. So the order of work in a mixed folder matters: run each file at the limit its destination states, and only fall back to one common limit when the destination really is the same for all of them. If you are sending ten files to one form, then the form's limit is the only limit that exists, and the folder-wide approach is correct.

If the form means 20,000 bytes, not 20,480

The tool reads "20 KB" as 20,480 bytes, because it multiplies by 1,024. Many upload forms do not: they write 20 KB and enforce 20,000 bytes. The six 20 KB outputs above came back at 20,171, 20,214, 20,385, 20,393, 20,444 and 20,446 bytes — all six are over 20,000, and all six would be rejected by a form that counts decimal kilobytes.

File At 20 KB At 19 KB Pixels lost
photo-2592x1944.jpg630 × 472 · 297,360 px · 20,214 B606 × 454 · 275,124 px · 19,115 B7.5%
bt-shot-1920x1080.png1,218 × 685 · 834,330 px · 20,393 B1,172 × 659 · 772,348 px · 19,365 B7.4%
bt-logo-1200x1200.png189 × 189 · 35,721 px · 20,171 B185 × 185 · 34,225 px · 19,299 B4.2%
bt-banner-2400x1200.jpg1,545 × 773 · 1,194,285 px · 20,444 B1,505 × 752 · 1,131,760 px · 19,411 B5.2%

19 KB in this tool is 19,456 bytes, so every one of these is safely under 20,000. The price is 4% to 8% of the pixels.

So the safe batch setting is one step below the number the form prints. If the form says 20 KB and you do not know which convention it uses, run the batch at 19 KB: you lose 4% to 8% of the pixels and remove the entire risk of an upload rejected for being 446 bytes over. The same trap at 100 KB, where the gap between 100,000 and 102,400 is 2,400 bytes, is measured on the 100 KB upload-form page.

Doing a folder by hand, in an order that wastes nothing

  1. Write the limit next to each file before you start. The limit belongs to the destination, not to the picture. A folder of ten files usually has three or four distinct limits in it, and writing them down first is what stops you re-running a file because you forgot which form it was for.
  2. Run the files that are already under their limit first. They come back untouched in 0 ms, so the first pass over the folder costs almost nothing and tells you how many files are real work.
  3. Then run the tight limits. 20 KB is where a picture either survives or falls apart. Finding that out on the first three files is better than finding it out on the tenth, after you have spent passes on everything else.
  4. Set the output format before the target. Format decides whether quality is a dial at all: JPG and WebP can trade quality for pixels, PNG cannot, so at 20 KB a PNG only has pixels to spend. Choosing format first also keeps the file from being re-encoded when it did not need to be.
  5. Read the verdict line, not just the size. "Dimensions scaled to 24%, quality 40%" and "original dimensions kept, quality 76%" are different outcomes that both say "under 20 KB". The first lost its pixels; the second lost its quality.
  6. Keep the download name. Each output is named after its source with the limit appended — photo-2592x1944-20kb.jpg — so a folder of outputs documents itself and you can see at a glance which limit each one was built for.
  7. Re-run only the misses. Nothing else needs a second pass, and a second pass on a file that already worked produces the same bytes anyway.

Questions this page gets

Can I resize several images to 20 KB at once?

Not in one action. The tool takes one file per pass — there is no server holding a queue, because the whole pipeline runs in the page. On the ten files above the average pass was 961 ms, so ten files is about ten seconds. Each pass keeps its own limit and its own output name, which is the advantage of doing it one at a time: a folder with four different limits is four groups of files, not one compromise.

What pixel dimensions will I get at a 20 KB limit?

Anywhere from 189 × 189 to 1,545 × 773, measured. It depends on the picture, not on the limit, and there is no width or height field to fill in — you set bytes and the dimensions follow. If you need a specific dimension, 20 KB is the wrong control: pick the dimension and accept whatever bytes it costs, or pick the bytes and accept the dimension. You cannot fix both without changing the picture. The 50 KB version of this trade-off, measured on seven starting sizes, is on the 50 KB page.

Why did my screenshot stay large while my photo got tiny?

Flat areas cost almost nothing to store and detail costs a lot. The dark UI screenshot kept 1,218 × 685, which is 40.2% of its original pixels, because most of it is one colour with straight edges. The camera photograph kept 630 × 472, which is 5.9% of its pixels, because there is texture in every square centimetre. Both were at 20 KB and both at 40% quality. The difference is entirely in what the encoder had to throw away.

Is 20 KB enough for a scanned document?

No, if someone has to read it. The A4 scan at 300 dpi came back at 336 × 475 pixels at 20 KB — legible as a thumbnail, useless as a page. At 100 KB the same file came back at 731 × 1,035 and was readable. A text-heavy page is the worst case for a byte budget: at 100 KB it cost 0.134 bytes per pixel, twice what the photograph cost, because sharp black text on white is expensive to store at any quality.

If I run the same file twice, do I get the same output?

Yes. Two files were run twice from a fresh page load and both returned identical dimensions and identical byte counts: 630 × 472 at 20,214 bytes and 968 × 646 at 20,385 bytes. Only the timing moved (657 ms against 330 ms). Re-running a file whose output you lost is safe, and the result will match the rest of the set.

Where this page stops: it is about the mechanics of running a folder — how many passes, what each pass returns, what a single folder-wide limit costs, and how the 20,000-versus-20,480 byte gap behaves. It deliberately does not re-derive the per-content-type pixel budget, which is measured here, or the ten-target ladder on a single 24 MP file, which is measured here. The two files that appear on more than one of these pages return the same numbers each time, which is the only reason to trust any of them.

Compress one image to an exact size