Compress JPEG
Shrink JPG and JPEG photos with a quality slider or an exact target size in kilobytes.
Compress JPEGDrop in your JPEGs and get WebP files back, encoded on this device.
JPEG files are accepted. Paste from clipboard with Ctrl+V (Cmd+V on a Mac).
Output on this page is always WebP. Every other setting is yours, and the compressors elsewhere on the site let you pick any format.
Removes camera model, timestamps and GPS coordinates from the output.
Compress without changing the pixel size of the image. Turn this off in target-size mode to let the tool shrink the image when quality alone cannot meet your limit.
Ready. Add a file to begin.
Quality mode · WebP output · 0 files
No files yet. Results will appear in this table as soon as you add one.
Your files are processed by your own browser. Nothing is uploaded to a server, so nothing can be stored, read or shared.
More tools
Each one runs in the browser the same way, with no upload and no account.
Shrink JPG and JPEG photos with a quality slider or an exact target size in kilobytes.
Compress JPEGReduce PNG screenshots and graphics while keeping transparency and hard edges intact.
Compress PNGRe-encode WebP images at a lower quality, or convert JPEG and PNG into WebP.
Compress WebPChange pixel dimensions by width, height or percentage, with the aspect ratio locked.
Resize an imageCombine several photos into one PDF, reorder the pages and choose paper size and margin.
Build a PDFWrite a formatted document in the browser and export it to PDF, DOCX or HTML.
Open the editorSpecification
Every capability written out as text, including the ones where the answer is no. A specification that only listed the wins would not be worth reading.
| Attribute | This tool |
|---|---|
| Supported input formats | JPG and JPEG |
| Output formats | JPEG, PNG, WebP |
| Compression type | LossyJPEG discards detail permanently by design. PNG output is lossless but far larger for photographs. |
| Quality control | Adjustable, 10 to 100Maps directly to the encoder's quality setting. Moving it genuinely changes the output. |
| Exact output file size | Yes — target in KBThe encoder searches for the highest quality that fits under your limit, then reports the size it actually reached. |
| Resize / image dimensions | Yes — max width and heightAspect ratio preserved. The resizer page adds exact pixel and percentage modes. |
| Batch / bulk processing | UnlimitedFiles are encoded in parallel across a Web Worker pool and can be downloaded as one ZIP. |
| Maximum file size | No limit set by this siteBounded in practice by your device's memory, since each image is held uncompressed while it is processed. |
| EXIF and metadata | Stripped by defaultCamera model, timestamps and GPS coordinates are removed. You can switch it off. |
| Transparency / alpha channel | Not applicable to JPEGJPEG has no alpha channel. Choose PNG or WebP output if you need transparency. |
| Chroma subsampling control | Not availableThe browser's encoder chooses it and exposes no setting. We will not add a control that cannot affect the output. |
| Progressive JPEG control | Not availablecanvas.toBlob gives no control over progressive encoding. Use MozJPEG or ImageMagick if you need it. |
| Colour profile handling | Converted to sRGBA browser canvas works in sRGB, so wide-gamut images are converted. Correct for the web, wrong for print masters. |
| Bit depth | 8 bits per channelThe maximum a browser canvas provides. HDR and 10-bit output need AVIF, which browsers cannot write. |
| Animation support | Not supportedA canvas decodes only the first frame of an animated file, so animation is out of scope rather than half-supported. |
| Where processing happens | In your browserNo upload endpoint exists in the compression path. Disconnect from the network after the page loads and it still works. |
| File retention | None — nothing is receivedThere is no copy to retain or delete, because no file is ever transmitted. |
| Watermark | NeverThe output contains your image and nothing else. |
| Account, quota or cost | NoneNo sign-up, no daily cap, no paid tier withholding a feature. |
| Browser support | Chrome, Edge, Firefox, SafariDesktop and mobile. Requires Canvas and Web Workers, which every current browser provides. |
How it works
Drag them onto the drop zone, click to browse, or paste from the clipboard. Batches are fine.
The default suits most images. Move it if you want a smaller file or a more faithful one.
Each row shows the size before and after. Save them one at a time or as a single ZIP.
Features
Queue as many image files as you like. A Web Worker pool handles them in parallel so a large batch does not freeze the page.
The quality slider maps directly to the encoder setting. Move it and the output genuinely changes — there are no cosmetic controls here.
Ask for 200 KB and the encoder searches for the highest quality that fits under your limit, then reports what it actually achieved.
Camera model, lens, timestamps and GPS coordinates can be removed on the way out. Useful before publishing a photo taken on a phone.
Write the result as JPEG, PNG or WebP regardless of what you put in, so you can test which format is smallest for a given image.
The whole pipeline runs in your browser through the Canvas API. Turn off your network connection after the page loads and it still works.
The output is your image and nothing else. There is no account, no daily quota and no paid tier holding back a feature.
The layout, the drop zone and the results table are all usable on a phone, and mobile browsers run the same encoder as the desktop ones.
In depth
At matched visual quality a WebP is typically 25–35% smaller than the JPEG it came from. On an image-heavy page that is the difference between a site that feels immediate and one that does not.
The cost is that you are performing a second lossy encode. Your JPEG has already discarded detail; the WebP encoder now has to spend bytes faithfully reproducing what remains, including the JPEG's own artefacts. The result is still smaller, but you get a noticeably better outcome converting from an original that has not been through a lossy encoder yet.
Where the source JPEG is all you have — which is usually the case — converting is still worth it. Just do not run the file back and forth between formats.
Do not carry your JPEG number across. WebP holds together better at the low end, so WebP at 75 looks roughly like JPEG at 82 while being meaningfully smaller. Starting from your usual JPEG value produces files larger than they need to be, which is how people conclude — wrongly — that WebP did not help.
For photographs converted from JPEG, 75 to 80 is the useful range. The default here is 78.
Every time a JPEG is decoded, edited and saved again, the encoder re-runs its quantisation step on data that has already been quantised once. Errors from the previous pass are treated as real detail and get their own new errors layered on top. This is called generation loss, and it accumulates in one direction only.
Saving an already-compressed JPEG at quality 90 does not restore anything — it just spends more bytes preserving the artefacts of the earlier pass. Saving repeatedly at a low quality is what produces the smeared, blotchy look of an image that has been through a dozen chat apps.
Two habits avoid it. First, always compress from the highest-quality original you have, not from a copy that has already been through a compressor. Second, decide on your output size once and do a single pass, rather than nudging the quality down repeatedly and re-saving each time. If you need to try several settings, run each of them against the original file.
The quality number in a JPEG or WebP encoder is not a percentage of anything. It is an index into a set of quantisation tables that control how aggressively detail is discarded. The relationship to file size is steep and non-linear.
For a typical 12-megapixel phone photograph the curve looks roughly like this:
Diminishing returns set in fast at the top of the range. Going from quality 100 to quality 90 usually halves the file for no perceptible change; going from 90 to 80 saves far less and costs slightly more. If you only remember one number, use 80.
Questions
Every answer below is present in the page source, expanded, so it can be read without opening anything.
Usually, but not always. If the source JPEG was already heavily compressed there is little redundancy left, and the WebP encoder may need as many bytes to reproduce it faithfully. The results table reports an increase honestly when it happens, so you can keep the original instead.
Every current one, including Safari on iOS and macOS. The remaining gap is older desktop software and some email clients, so send a JPEG if the file is going into a newsletter or to a print shop.
No. This page writes lossy WebP, because that is what a browser's canvas encoder produces, and the quality slider genuinely controls it. If you need every pixel preserved exactly, use PNG on the Compress PNG page — nothing here will call a lossy encode lossless.
Yes. Add as many JPEGs as you like; they are processed in parallel across Web Workers and can be downloaded together as a ZIP.
It does when the strip option is on, which is the default. The image is decoded to raw pixels and re-encoded, so camera model, timestamps and GPS coordinates are not carried into the WebP.
If you are serving the image on a web page and want maximum compatibility, yes — a <picture> element with a WebP source and a JPEG fallback costs one extra line of markup. Given current browser support you can also serve WebP alone for most audiences.
No. Decoding and encoding both happen in this browser tab through the Canvas API. Load the page, disconnect from the network, and the conversion still works.
Related topics
Related concepts, formats and guides across the site. Every link goes to a page that covers the term properly.
From the blog
Longer explanations from the blog.
WebP produced a 27.0 KB file against MozJPEG's 41.1 KB on the same photograph at slightly higher measured fidelity — 34% smaller. It also produced a larger file than JPEG on random noise. The advantage is real and content-dependent.
9 min read
Resize before you compress. Measured on one photograph: half the width at quality 80 produced a 16.4 KB file, while full width at quality 40 produced 20.6 KB and looked far worse. The order of operations matters more than the settings.
8 min read
PNG stored the same photograph in 1274.1 KB where JPEG needed 67.5 KB — nineteen times larger. On a flat graphic PNG won. On a smooth gradient PNG lost to JPEG by a factor of two, which surprises most people.
9 min read