Tool / Images

Image Compressor

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.

Longest side in pixels

Select an image file to begin.

Original

Original

Dimensions-

File size-

Compressed

Compressed

Dimensions-

File size-

OutputWebP

How to compress an image without guessing

Start with moderate settings, compare the output, and reduce quality or dimensions only as far as the destination requires.

  1. Choose the image

    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.

  2. Set format, quality, and size

    Choose an output format, set a quality level for compressed formats, and limit the longest side when the original resolution is larger than needed.

  3. Compress and compare

    Review the preview, dimensions, final size, and estimated savings. Adjust one setting at a time if the result is too large or visibly degraded.

Practical compression choices

  • For web photos, WebP around 70–85% quality is a useful starting range, not a universal rule.
  • Reduce pixel dimensions before pushing quality very low; oversized images waste bytes even when compressed.
  • Keep PNG for transparency or crisp flat graphics, and expect photographic PNG files to remain relatively large.

Important compression tradeoffs

  • Lossy compression permanently removes image information, so keep the original file.
  • Repeatedly compressing an already compressed image can add visible artifacts and color banding.
  • Browser re-encoding may remove metadata and animation; this tool is intended for ordinary still images.

Practical guidance

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.

Measured compression

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.

Resize the long side, then encode WebP

A 240 × 160 PNG of 97137 bytes became a 120 × 80 WebP of 936 bytes at quality 0.78.

Input

continuous-tone.png · 240 × 160 · 97137 bytes · image/png
Settings
Output format WebP
Quality 0.78 (shown as 78%)
Max dimension 120
Browser Headless Chrome 154.0.8037.99

Observed WebP

120 × 80 · 936 bytes · image/webp
Aspect ratio stayed 3:2
Smaller by 99.0%

What to check

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.

Caveats

  • 99.0% is not a typical savings rate for photographs. The source is a generated color field stored as a large PNG.
  • The tool would download continuous-tone-compressed.webp. The example file is named continuous-tone-120.webp so the setting stays visible.

Example files

Same image, same quality, no resize

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.

Input

continuous-tone.png · 240 × 160 · 97137 bytes · image/png
Settings
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

Observed WebP

240 × 160 · 1310 bytes · image/webp
Smaller by 98.7%

What to check

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.

Caveats

  • Another photograph can lose visible detail at 0.78 even when the byte savings look like these.
  • The example file is continuous-tone-full.webp. The tool’s download name would be continuous-tone-compressed.webp.

Example files

A tiny flat image got larger, and a bigger max dimension did not upscale it

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.

Input

tiny-flat.png · 8 × 8 · 80 bytes · image/png · two flat color blocks
Settings
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

Observed outputs

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%

What to check

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.

Caveats

  • 617.5% sounds large because the denominator is 80 bytes. Read the byte counts beside the percentage.
  • The tool would name a WebP download tiny-flat-compressed.webp. The examples are tiny-flat.webp and tiny-flat-max-100.webp.

Example files

Change one setting, then compare the measured file

The how-to already says to set format, quality, and size. These are the results of doing that on the fixtures above.

WebP at 78% with a smaller long side

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.

WebP at 78% without resizing

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.

PNG

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.

A max dimension larger than the image

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.

When the compressed file is not smaller

The percentage uses the selected file as the denominator. These cases are the ones measured here, plus the limits checked before encoding.

Problem: The output is larger than the input.

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.

Problem: Raising the max dimension did not add pixels.

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.

Problem: Moving the quality slider does nothing for PNG.

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.

Problem: The savings percentage looks enormous.

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.

Problem: The image is rejected before compression.

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.

References for the encoder

Sizes on this page were measured from the linked files. These references describe the canvas encode step.

Frequently asked questions

Does the image compressor upload my images?

No. Kitly re-encodes images locally in your browser with canvas processing, so your selected files do not need to leave your device.

How can I make an image file smaller?

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.

Can I preview the savings before downloading?

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.

Why did a small image get larger?

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.

Why did a larger max dimension not add pixels?

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.