Image compressor
MDV ToolsDrop images, choose how small, and download files that weigh less.
| File | Before | After | Saved |
|---|
How this works
Each image is decoded by the browser with createImageBitmap, which applies the EXIF
orientation so a phone photo stays upright, drawn onto a <canvas>, and encoded
again with canvas.toBlob(type, quality). That is lossy for WebP and JPEG: the new file
holds fewer details than the original, more so at lower quality, and compressing a file twice loses
a little more each time. Use Compare to look before you download. PNG is lossless and ignores the
quality slider, so Same format rarely makes a PNG smaller; WebP usually does. JPEG has no transparency,
so transparent pixels become white.
Longest side scales an image down so its longer side is at most that many pixels, keeping its proportions; it never enlarges. Keep the original when it is already smaller gives you the original file back, untouched, whenever the new one would weigh the same or more, and the row says so. Re-encoding drops everything that is not pixels — EXIF, including GPS location, the camera model and the date, colour profiles, and every frame of an animated GIF after the first — which is often wanted, but a kept original keeps all of it, and the row says that too. Colours are drawn in the sRGB space the canvas uses, so a wide-gamut photo can look slightly less saturated. A browser without a WebP encoder returns PNG instead, and the page reports the type it got.
Limits: 50 images at a time, each up to 100 MiB and 100 megapixels once decoded, and an output canvas of at most 124,992,400 pixels (the Firefox ceiling; iPhones and iPads stop at 16,777,216 — pick a Longest side there). A file that breaks a limit or does not decode is listed with the reason, and the rest are compressed. Changing a setting compresses the whole batch again from the originals. Download all saves the files one by one; the browser may ask to allow several downloads. Nothing is uploaded: there is no server in this file.
The Dark button remembers its setting in this browser's local storage. Nothing you type or drop into the page is stored.