tools / repair

ZIP image compressor

Images are usually 60–90% of a website ZIP and the one part that shrinks dramatically without anyone noticing. This converts the whole archive in one pass — and, unlike a plain image converter, updates every link so nothing breaks.

Compress the images in a ZIP

Decoding and encoding happen on a canvas in this tab. Large archives take a while; the page stays usable.

Drop your site ZIP here, or click to choose .zip · opened in this tab, never uploaded

Why WebP, and why it is safe in an APK

WebP is typically 25–35% smaller than JPEG at the same visual quality, and often 50–80% smaller than PNG for photos and illustrations — while still supporting transparency. On the open web you might hesitate because of old browsers; inside an APK there is no such worry. The page is rendered by Android's WebView, which is Chromium, and Chromium has decoded WebP since long before the oldest Android version an app can target today.

What the compressor does, step by step

  1. Finds every .png, .jpg and .jpeg in the archive.
  2. Decodes each one, scales it down if its longer side exceeds the maximum you chose (1920 px by default — wider than any phone screen's CSS width times its pixel ratio in practice), and encodes it as WebP at the quality you set. Transparency is preserved.
  3. Compares sizes and only keeps the new file if it is smaller. Tiny icons and already-optimised PNGs are often better left alone, and are.
  4. In WebP mode, rewrites every reference to a converted file — in HTML, CSS, JavaScript, JSON, SVG and manifest files — from .png/.jpg to .webp.
  5. Packs everything else unchanged into a new ZIP.

A file name is only renamed when every image sharing that name (say, icon.png in two folders) got smaller. That keeps the link rewriting safe without needing to understand your code's folder logic.

Choosing the settings

ContentQualityMax size
Photos, hero banners, product shots0.75–0.801920
Illustrations, UI art, screenshots with text0.85–0.901920 or none
Game sprite sheets and texture atlases0.90none — atlases rely on exact pixel positions
Pixel artuse "Keep formats"none — lossy encoding blurs hard edges

What it cannot see

Image paths assembled at runtime — 'img/' + id + '.png' — are not literal file names, so they are not rewritten. If your code builds paths like that, use "Keep formats" mode, which re-encodes JPEGs and resizes images in place without renaming anything. Always open the result in the builder's preview before building.

Frequently asked questions

Will converting to WebP break my site in the app?

Not by format — the WebView decodes WebP natively. The only risk is a path the tool could not rewrite because your code builds it at runtime. If that applies, use Keep formats mode, which never renames files.

Why were some images kept?

Because the WebP version was not smaller, the image could not be decoded, or another image with the same file name did not shrink. Small icons and heavily optimised PNGs are often already as small as they get.

Does it strip EXIF metadata?

Yes, as a side effect. Re-encoding through a canvas drops camera metadata, including GPS location — which is usually what you want in a published app.

Is animated GIF supported?

No. A canvas captures only the first frame, so GIFs are left untouched. Convert animations to a short MP4 or animated WebP with a dedicated tool.

Read in the docs

Related tools

Unzip it on a phone today

Upload the ZIP, name the app, pick an icon — and download a signed APK a few minutes later. Free builds, no watermark, no Android Studio.

Convert a ZIP — free site.zip → app-release.apk