# Image Compress — AO tool

> Make images smaller — by quality or to a target file size — with no batch limit and honest before/after numbers. Runs entirely client-side: no upload, no server, no file limits, no sign-up.

Human page: https://abstractobjective.dev/tools/image-compress/
Status: live · Category: image

## Input and output
- In: jpg, jpeg, png, webp, gif, bmp, avif, heic, heif
- Out: keep, jpg, webp, avif, png

## Programmatic use (the AI-facing twin)
All computation happens locally in the page context.

- `window.AOImageCompress.compressBlob(blob, {mode, quality, targetKB, format, maxDim}) -> Promise<{blob, width, height, format, originalSize}>`
  Compress an image Blob. mode: quality|target. quality: 0..1. targetKB: desired size in kilobytes when mode is target (binary search over encoder quality; the achieved size is returned, never promised). format: keep|jpg|webp|avif|png. maxDim: optional longest-side cap.

## Notes
- Target-size mode searches encoder quality to land under your budget and reports the size it actually achieved — it does not promise an exact number it cannot guarantee.
- If a file cannot be made smaller, the tool says so rather than inventing a percentage.
- PNG output is lossless, so the quality slider does not apply to it; switch to WebP or AVIF for real reductions on graphics.

## Properties
- Privacy: files never leave the browser tab.
- Limits: none imposed by us; the practical ceiling is your device's memory.
- Cost model: client-side compute — free without caps, sustainably.

---

## Two ways to shrink

**By quality** is the honest default. You choose how much detail to trade away and the file lands wherever it lands. For photographs, 75% is usually indistinguishable from the original at normal viewing size; below about 50% you start to see it in skies and skin.

**To a target size** is for when something else sets the rules — a form that refuses anything over 2 MB, an email limit, an upload cap. Tell it the budget and it searches the encoder for the best quality that fits underneath. It then reports the size it **actually achieved**, rather than promising a number it cannot guarantee. Image compression is not a dial with predictable output: a photograph of a blue sky and a photograph of a forest compress completely differently at identical settings.

## What "no limit" means here

Every free compressor caps something. TinyPNG stops at twenty files a batch. Others cap the file size, or the number of goes per day, or put bulk behind an account. Those limits are not stinginess — each of those services pays for the bandwidth to receive your images and the processor time to compress them, so rationing is the only way the free tier survives.

Your browser does the work here, so there is nothing for us to ration. Drop one image or four hundred.

## When it tells you no

If a file cannot be made smaller, this tool says **"No change — this file was already at this size"** instead of showing you a fabricated percentage. If the output came out *larger* than the input, it says that too, and tells you to keep the original.

This matters more than it sounds. Re-compressing an already-compressed JPEG usually makes it slightly worse *and* slightly bigger, and a tool that reports "compressed!" in that situation is lying to you. Choosing **WebP** or **AVIF** output is often the real answer — those formats can be meaningfully smaller than a JPEG at matching visual quality, which is a genuine gain rather than a second round of loss.

## Choosing a format

**Keep original** re-compresses in place — fine for a quick pass. **WebP** is the safest modern choice: much smaller than JPEG, and every current browser reads it. **AVIF** is smaller still and slower to produce; it is the right pick when the file will be served many times. **PNG** is lossless, so the quality slider does nothing there — use it for screenshots and graphics where text must stay crisp.
