A batch is the quickest way to see what this tool does. Put a folder of pictures in, choose one set of settings, and read every result side by side. Nothing you put in is uploaded, so it is fine to try it on a picture you are still working on.
Add your files
Drag files onto the drop zone, or use “or choose files” to open the ordinary file picker. You can add several at once. Choosing or dropping again replaces the list rather than adding to it, and the results already on screen go with it, so choose every picture you want in one selection or one drop. To add one more later, choose the whole set again. The tool reads JPEG, PNG, WebP and AVIF. It does not read HEIC, so a picture straight off a phone may have to become a JPEG somewhere else first.
Nothing starts converting on its own. Files wait in the list until you press Compress, because the next two decisions apply to every file in the run at once.
Pick an output format
- WebP is lossy, keeps transparency, and is widely supported by current browsers.
- AVIF is lossy and keeps transparency. You may need a current browser to view the result, and the first conversion in this format also waits for the codec module to arrive.
- JPEG is lossy and has no transparency at all: anything transparent in your picture comes out white. Choose it when you do not know what will open the file.
- PNG is lossless. It ignores the quality setting entirely, and a detailed photograph can come out larger than it went in.
Which one gives the smaller file depends on the picture, so this post does not rank them. Every finished row shows the size your file went from and the size it came to, and shows you both pictures, so you can compare one file at a time on your own images instead of trusting an order someone else measured.
WebP and AVIF both need a reasonably current browser. If the file is going somewhere you cannot test, JPEG is the safe answer.
Choose a quality
Quality runs from 1 to 100 and starts at 75. It applies to JPEG, WebP and AVIF; PNG ignores it. Lower spends fewer bytes on the picture, higher spends more. Neither end is free: at the bottom end the picture loses detail, and where that detail goes first depends on the picture and the encoder, so no fixed order is promised here. At the top end the file is big and still not the original. The default of 75 is a reasonable place to start, and every finished row shows you the two sizes and the two pictures so you can judge the result instead of guessing.
Resize only if you need to
Resize is off until you choose it. By width, the output keeps the picture’s proportions. By percent, both dimensions change together, and the field stops at 100. Percent mode cannot enlarge a picture; a width you set above the original will, which is rarely what makes a file smaller. If your camera stored a rotation in a JPEG, PNG or WebP, it is applied to the pixels first, so a portrait photo comes out upright. Only the four orientations that include a quarter turn, EXIF 5 to 8, swap the two numbers as well, so a file whose header reads 600 by 400 can come out 400 by 600. A 180 degree turn and the two mirroring ones keep both numbers. An AVIF input’s EXIF is not read at all.
Set a target when something has a limit
If a form or a server wants a file under a number of kilobytes, put that number in the target field. The unit is KiB, which is 1024 bytes and not 1000. The tool spends quality to reach it: down, as far as 1, when the first encode is over the number, and up from your setting, never above 100, when it comes out well under. Only the upward search is bounded by your setting, so a file that was over the target can come back rougher than the quality you chose. It will not reach a target that quality 1 already misses, and what you get then is the quality 1 encode. A target above what quality 100 can reach cannot be filled either, because the scale stops at 100: you get the largest file the format made, which is still under your number, and the row reports the target as reached, because the file is under the ceiling. Otherwise the search aims at the band from 95% to 100% of your number and lands in it when a whole-number quality step falls inside it, and it never goes over your number. PNG ignores quality, so the search has nothing to spend there, but a PNG still gets a second pass through an optimizer that can return fewer bytes than the first encode, so a PNG target that the first encode missed can still be met. The verdict is taken on the file you download, with any EXIF you asked to keep already written in, so you are never told a limit was met when the file in your downloads folder is over it.
Press Compress and read the rows
Each file gets a row with its size before, its size after, the change in percent when there is a measurable one, the output’s pixel dimensions, and a download link. The run starts one worker for every core your browser reports, never more workers than files, and each worker takes the files one after another. For AVIF output the encoder has threads of its own, so those cores are shared between the encoder’s threads and the files in the batch. A device with little memory starts fewer workers, because each one needs room for a decoded picture and a codec. Cancel stops the whole run at once rather than letting the codec finish first, and a file that was already converted keeps its result.
The first conversion in a given format is slower than the ones after it, because the page fetches that format’s WebAssembly module from this site the first time you use it. The page’s own HTML, stylesheets and scripts are fetched when you load it, and the worker it runs in is fetched when the first run starts. All of that comes from this site and nothing goes anywhere else.
When a file does not convert
A corrupt or truncated file gets its own row saying so, and the rest of the batch finishes. An input of more than 40,000,000 pixels, or larger than 32 MiB, is refused with a message that names the limit. Both are fixed numbers rather than a reading of your machine, so a different computer does not raise them; crop the picture, shrink it elsewhere or split the work, and choose the files again (choosing replaces the list). If the page says the browser could not run the image engine, the file in progress gets that row and that worker takes no further files, while the other workers carry on with the rest of the queue. If every worker fails, each file that had not already started gets that same row rather than waiting. Rows that had already finished keep their results; try a current version of Chrome, Firefox, Edge or Safari.
Where to go next
How the compression works on your device explains each step, including what a target size can and cannot do. Why your file stays on your device shows the evidence for the promise at the top of this page. When you are ready, compress an image with your own files.