Compress JPEG
Shrink JPG and JPEG photos with a quality slider or an exact target size in kilobytes.
Compress JPEGSet exact pixel dimensions or a percentage, and apply it to a whole batch at once.
JPG, PNG and WebP files are accepted. Paste from clipboard with Ctrl+V (Cmd+V on a Mac).
Keep the original format, or convert on the way out to compare which one is smallest.
Keeps the original proportions. Turn it off only if you intend to distort the image.
Images already smaller than the target are left at their own size instead of being stretched.
Removes camera model, timestamps and GPS coordinates from the output.
Ready. Add a file to begin.
Pixels mode · same as input 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 WebPCombine 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, PNG, WebP |
| Output formats | JPEG, PNG, WebP |
| Compression type | Resampling, plus optional lossy re-encodeDownscaling discards pixels permanently. The output format then decides whether encoding is lossy as well. |
| Quality control | Adjustable, 10 to 100Maps directly to the encoder's quality setting. Moving it genuinely changes the output. |
| Exact output file size | Exact pixels or percentageThis tool targets dimensions rather than kilobytes. Use the compressors for a KB target. |
| 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 | Preserved for PNG and WebPFlattened onto a background colour only if you choose JPEG output, which cannot store alpha. |
| 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. |
Drag the handle to compare, and zoom in to inspect the detail at full size.

How it works
Drag files onto the drop zone, click it to browse, or paste an image from the clipboard.
Enter a width and height in pixels, or switch to percentage to scale every file by the same proportion. Keep the ratio locked unless you want to distort the image.
Each row shows the dimensions before and after alongside the file size. Save them individually or as one ZIP.
Features
Give exact dimensions when you know the target, or a percentage when the batch contains images of different sizes.
Enter one dimension and the other is worked out for you, so nothing is stretched by accident.
Images already smaller than the target are left alone rather than being blown up into a soft, larger file.
One setting applied across a whole folder of images, processed in parallel by Web Workers.
Write the resized output as JPEG, PNG or WebP, whichever suits where the image is going.
Camera data and GPS coordinates are dropped on the way out unless you choose to keep them.
Scaling happens on a canvas inside your browser. No file leaves the device at any point.
No account, no daily cap, no branding added to your images, no paid tier.
In depth
An image has one intrinsic size: its width and height in pixels. Everything else — inches, centimetres, DPI — is an instruction about how to print it, stored in metadata, and has no effect on how it appears on a display.
A browser draws an image at whatever CSS size the layout specifies, scaling the file up or down on the fly. If the file is bigger than the space it is drawn into, the extra pixels are downsampled at display time and thrown away every single page load, having already cost the visitor the bandwidth to download them. That is the waste resizing eliminates.
A digital image has exactly one physical property: its pixel dimensions. A 3000 × 2000 photograph contains six million pixels whether its metadata claims 72 DPI or 300 DPI.
DPI is a printing instruction stored in a metadata field. It tells a printer how many of those pixels to place per inch of paper, which determines the printed size — 3000 pixels at 300 DPI is a 10-inch-wide print; the same file at 72 DPI is a 41-inch-wide print of the same six million pixels. Changing the number changes nothing about the file except a handful of bytes in a header.
So "save this at 72 DPI for the web" does not make a file smaller. Reducing pixel dimensions does. If a print shop asks for 300 DPI at A4, what they actually need is about 2480 × 3508 pixels; supply that many pixels and the DPI tag can be corrected in seconds.
Work backwards from the largest space the image can occupy in your layout, then double it for high-density screens.
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.
JPEG has no alpha channel. It cannot store transparency in any form. When a transparent PNG is converted to JPEG the transparent pixels have to become something, and most tools silently fill them with black — which is why a logo exported to JPEG so often arrives with an unwanted dark box around it.
If your image has transparency you have three sensible options: keep it as PNG, use WebP (which supports alpha and is typically 25–35% smaller than PNG for the same image), or flatten it onto a known background colour deliberately rather than letting an encoder choose for you.
PNG's own compression is lossless and works best on images with few distinct colours and large uniform regions. A screenshot of a text document compresses beautifully. A photograph saved as PNG does not, because virtually every pixel differs from its neighbour and there is no redundancy for the algorithm to exploit.
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.
Questions
Every answer below is present in the page source, expanded, so it can be read without opening anything.
Substantially, and more reliably than any quality setting. File size scales with the number of pixels, so halving both the width and the height leaves a quarter of the pixels and usually something close to a quarter of the file. For images destined for a web page this is nearly always the first thing to do.
Making an image smaller is safe — the browser averages groups of pixels down, which is a well-defined operation and looks clean. Making it larger is not: there is no extra detail to invent, so an enlarged image is soft by definition. The Never enlarge option is on by default for that reason.
It keeps the original proportions. Enter a width and the matching height is calculated for you, so nothing is stretched or squashed. Unlock it only when you deliberately want to distort the image to fit a fixed frame.
Yes. Switch the mode to Percentage and every image in the batch is scaled by the same proportion of its own size, which is what you want when the batch contains images of different dimensions.
For a full-width photograph in a normal content column, a longest edge of 1600–2000 pixels is generous. Hero images that span a wide screen justify 2000–2560. Thumbnails need 400–600. Serving pixels beyond what the layout can display costs bandwidth and gains nothing.
A device with a 2× display draws two physical pixels for every CSS pixel, so an image shown in an 800-pixel-wide column looks sharpest if the file is around 1600 pixels wide. Doubling is the sensible ceiling; 3× files are almost never worth their size.
Yes. Add the whole batch and the same settings are applied to every file. Each one gets its own row showing the dimensions before and after, and Download all packages them into a single ZIP.
It does when the Strip EXIF option is on, which is the default, because the output is written from raw pixels rather than by editing the original file. Camera model, timestamps and GPS coordinates are not carried across.
No. Decoding, scaling and re-encoding all happen in this browser tab using the Canvas API. No file is transmitted, and no server ever sees your image.
Resizing changes the pixel dimensions of the whole image and keeps all of the content. Cropping removes part of the frame and keeps the remainder at its original scale. This tool resizes; it does not crop, and it does not claim to.
Keep photographs as JPEG or convert them to WebP. Keep screenshots, logos and anything with transparency as PNG or WebP. Resizing does not change which format suits the content.
Most often because the output format is PNG and the content is photographic, in which case the file stays big however few pixels it has. Switch the output to JPEG or WebP and it will drop sharply.
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.
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
Quality 80 is not 80% of anything. It is an index into a quantisation table. Measured on one photograph: dropping from 100 to 90 removes 77% of the file and 4.2 dB of fidelity; dropping from 40 to 30 removes 17% and costs almost as much.
8 min read
Attachments are base64-encoded in transit, which inflates them by about a third. A 20 MB limit is really a 15 MB limit. Resize to 1600 pixels on the long edge and encode at quality 80, and a photograph lands near 150 KB.
9 min read