An image compressor on the web usually means one of two things: a true optimizer that rewrites PNG or JPEG bytes, or a re-encoder that draws the picture and writes a new lossy file. This page is the second kind. It is honest about that. You choose a local JPEG, PNG, or WebP. The browser decodes it, draws the same pixel size onto a canvas, and encodes JPEG or WebP at the quality you pick. The result can be smaller. It can also be the same size or larger if the source was already tight or if you picked a high quality.
This is not pngquant, not mozjpeg, and not a cloud “magic compress” service. It does not strip a custom Huffman table while keeping every pixel. It does not keep EXIF. It does not upload. If you needed fewer pixels, use the Image Resizer and then compress. If you needed PNG, JPEG, or WebP as a different container, use the Image Format Converter.
SVG is refused. GIF and HEIC are refused. Type is sniffed from bytes. The 8 MB, 8,000 px, and 16 megapixel caps match the rest of this cluster so a large phone photo does not freeze the tab.
Empty selection, unsupported type, oversized file, and decode failure each show a status error. If the new file is not smaller, the status says so. That is a valid outcome, not a hidden success. Clear forgets the session and revokes object URLs.
A 2.4 MB phone JPEG at quality 0.75 often drops under a megabyte. A 180 KB screenshot PNG encoded as JPEG may shrink or may look worse on text. A WebP that was already encoded at a low quality may grow if you ask for 0.95. The page reports both sizes and the signed change so you can decide. It will not invent a “saved 80%” claim.
PNG input is allowed because people compress screenshots. Output is still JPEG or WebP. Alpha is lost on JPEG. WebP may keep alpha if the browser encoder does. This page does not promise alpha on WebP.
Quality is the canvas encoder argument. Browsers differ. The same slider is not a guaranteed kilobyte number across Chrome and Firefox. If a host asked for a file under 500 KB and this page cannot get there without wrecking faces, resize first or take a smaller source. Do not run the same file through this page ten times and expect a studio archive.
Each pass is a new lossy generation. If you compress, download, and compress again, you stack artifacts. Use the loaded original for a second quality try on this page. The working canvas is rebuilt from the first decode, not from the last Blob, until you clear or choose another file.
The file is untrusted input. Magic bytes decide the type. A filename with quotes or tags is sanitized for the download name and never written with innerHTML. SVG is refused because a scripted SVG is not a photo. There is no server temp folder and no third-party encoder. If those were required, this candidate would have been rejected instead of quietly changing the privacy model.
Phone photos often arrive already compressed by the camera app. A second JPEG pass at 0.9 may do almost nothing. A pass at 0.4 will do something and may destroy skin. Look at the preview and the size row. If the change is a few kilobytes, keep the original. This page will not hide a failed shrink behind a green badge.
This re-encodes pixels with the browser canvas. It is not a lossless PNG optimizer and it does not keep EXIF. JPEG and WebP quality is a browser encoder setting, not a guaranteed file-size target.
No. A tight source can stay the same size or grow. The page shows both sizes.
No. JPEG and WebP output is a new lossy encoding from canvas pixels.
No. Processing stays in this browser.
No. That needs a dedicated optimizer. This page re-encodes to JPEG or WebP.