Original
Dimensions-
File size-
Tool / Images
The Kitly image compressor re-encodes the selected file locally in your browser. Opening a format depends on this browser. The result is not guaranteed to be smaller.
Select an image file to begin.
Dimensions-
File size-
Dimensions-
File size-
OutputWebP
This opens an email to Kitly. Nothing is sent until you send the message from your email app.
Do not include passwords, file names, file contents, pasted JSON, destination URLs, QR contents, short codes, or other secrets.
Start with moderate settings, compare the output, and reduce quality or dimensions only as far as the destination requires.
Open the original file and note its dimensions and size. Keep a separate copy of the original if you may need to edit it later.
Choose an output format, set a quality level for compressed formats, and limit the longest side when the original resolution is larger than needed.
Review the preview, dimensions, final size, and estimated savings. Adjust one setting at a time if the result is too large or visibly degraded.
These examples record bytes, dimensions, format, and settings from one Chrome session. One continuous-tone image gets smaller as WebP. The same image stays smaller without resizing. An 8 × 8 flat PNG gets larger, and asking for a bigger max dimension does not add pixels.
Compression needs JavaScript because the browser redraws and encodes the image on your device. The measured sizes, setting choices, and troubleshooting below stay readable without JavaScript.
Both inputs are original synthetic fixtures. The large one is a continuous-tone color field, the photographic case of smooth color rather than a camera file. The small one is two flat color blocks. Headless Chrome 154.0.8037.99 on macOS. Quality 0.78 is the control’s initial value, shown as 78%. The longest side is scaled down only when it is greater than the max dimension; a larger request does not upscale.
A 240 × 160 PNG of 97137 bytes became a 120 × 80 WebP of 936 bytes at quality 0.78.
continuous-tone.png · 240 × 160 · 97137 bytes · image/png | Output format | WebP |
|---|---|
| Quality | 0.78 (shown as 78%) |
| Max dimension | 120 |
| Browser | Headless Chrome 154.0.8037.99 |
120 × 80 · 936 bytes · image/webp
Aspect ratio stayed 3:2
Smaller by 99.0% The longest side was 240, so a max dimension of 120 scaled both sides by one half. The page would show “Smaller by 99.0%.” That percentage is this file only. Opening the image sets the max-dimension field to 240, so reproducing this result means typing 120 before compressing.
With the max dimension left at 240, the same PNG became a 240 × 160 WebP of 1310 bytes, still much smaller, but larger than the resized file.
continuous-tone.png · 240 × 160 · 97137 bytes · image/png | Output format | WebP |
|---|---|
| Quality | 0.78 (shown as 78%) |
| Max dimension | 240 (the longest side, so no resize) |
| Browser | Headless Chrome 154.0.8037.99 |
240 × 160 · 1310 bytes · image/webp
Smaller by 98.7% Keeping every pixel still cut the file from 97137 bytes to 1310 bytes. The resized 120 × 80 file was 936 bytes. On this fixture, lowering the long side removed more bytes than quality 0.78 did by itself. Compare those two downloads if you need to decide whether the extra pixels are worth 374 bytes.
An 8 × 8 PNG of 80 bytes became a 574-byte WebP. Asking for a max dimension of 100 produced the same 8 × 8 file. A PNG re-encode grew to 117 bytes.
tiny-flat.png · 8 × 8 · 80 bytes · image/png · two flat color blocks | WebP quality | 0.78 |
|---|---|
| WebP max dimension | 8, then a separate run at 100 |
| PNG run | PNG, quality slider disabled, max dimension 8 |
| Browser | Headless Chrome 154.0.8037.99 |
WebP, max dimension 8: 8 × 8 · 574 bytes · larger by 617.5%
WebP, max dimension 100: 8 × 8 · 574 bytes · byte-identical to the first WebP
PNG re-encode: 8 × 8 · 117 bytes · larger by 46.3% The page would say “Output is larger” and “617.5%,” not “Smaller by 0.0%.” The extra 494 bytes are the WebP container around an image that was already tiny. Setting the max dimension to 100, above both sides, left the image at 8 × 8. The two WebP files match byte for byte. Re-encoding as PNG also failed to shrink the file.
The how-to already says to set format, quality, and size. These are the results of doing that on the fixtures above.
Use when: The destination accepts WebP and the image is larger than the layout needs. On the 240 × 160 fixture, max dimension 120 produced 936 bytes.
Trade-offs: You throw away pixels. The full-size WebP of the same source was 1310 bytes, so the resize saved a further 374 bytes on this file only.
Use when: You need the original pixel count. Leaving the max dimension at the longest side kept 240 × 160 and still cut 97137 bytes to 1310 bytes.
Trade-offs: Quality 0.78 is lossy. Inspect edges and flat skies on a real photo; this color field does not show every artifact.
Use when: You need lossless-looking flat color or transparency more than a smaller file.
Trade-offs: The quality slider is disabled. The 80-byte PNG became 117 bytes, larger by 46.3%, with the same 8 × 8 dimensions.
Use when: You want to confirm the tool will not invent pixels.
Trade-offs: It does not upscale. Max dimension 100 on the 8 × 8 image stayed 8 × 8 and matched the 574-byte WebP from max dimension 8.
The percentage uses the selected file as the denominator. These cases are the ones measured here, plus the limits checked before encoding.
Likely cause: The source is already small or a flat PNG. tiny-flat.png went from 80 bytes to 574 bytes as WebP at 0.78.
What to do: Keep the original. The label should read “Output is larger,” with the percentage based on the original size. Do not re-compress the larger download and expect it to shrink.
Likely cause: The scaler never upscales. A request of 100 on an 8 × 8 image stayed 8 × 8.
What to do: Use another tool if you need a larger pixel grid. Here, set the max dimension below the longest side only when you intend to shrink.
Likely cause: Quality is passed to the encoder only for JPEG and WebP.
What to do: Switch to WebP or JPEG if you want that control. For PNG, only the dimensions and the browser’s PNG encoder affect the bytes, as in the 80-to-117-byte re-encode.
Likely cause: A tiny denominator inflates the figure. 494 extra bytes on an 80-byte file is 617.5%. The resized color field’s 99.0% is 96201 bytes removed from 97137, a different situation.
What to do: Read the input bytes, output bytes, and dimensions beside the percentage before you publish the file.
Likely cause: The limit is 25 MB or 40 megapixels, or the extension and MIME type disagree. HEIC, HEIF, and TIFF open only when this browser can decode them.
What to do: Choose a file this browser already displays. Corrupt files and unsupported encodings are reported as different errors.
Sizes on this page were measured from the linked files. These references describe the canvas encode step.
No. Kitly re-encodes images locally in your browser with canvas processing, so your selected files do not need to leave your device.
Lower the quality setting, reduce the maximum dimension, or use an efficient compressed output such as WebP when the destination supports it. Tiny or already small files can still grow.
Yes. The tool reports whether the output is smaller, larger, or the same size, with dimensions, output format, and file size. It does not invent a savings percentage for an equal result.
An 8 × 8 PNG of 80 bytes became a 574-byte WebP at quality 0.78, which the page reports as larger by 617.5%. The same max-dimension request of 100 stayed 8 × 8 and produced the same 574 bytes.
The tool scales down only when the longest side is greater than the max dimension. It does not upscale. The 8 × 8 fixture stayed 8 × 8 when the max dimension was 100.