An iPhone photo is 3–6 MB. A screenshot of your desktop is 2–4 MB. A "save this PNG so I don't lose quality" file is often 8 MB. Multiply by a portfolio, a blog, an email thread, and you're sending hundreds of megabytes for pictures that nobody can tell apart from a 500 KB version.

Image compression closes that gap. Zebra runs MozJPEG, Oxipng, and libwebp directly in your browser via WebAssembly. The file stays on your device. Most photos come out 60–90% smaller with no visible quality loss.

Three steps

  1. Open the image compressor.
  2. Drag in a JPG, PNG, or WebP (up to 25 MB).
  3. Pick Light, Medium, or Strong, click Compress, then Download.

A 4 MP iPhone photo finishes in about 2 seconds on a Mac. A 12 MP photo takes 4–6 seconds. Mobile Safari adds a couple of seconds on top. If you need to shrink a document instead, the PDF compression guide walks through the same approach.

Why images get big

  • Resolution. A 4032×3024 iPhone JPEG has 12.2 million pixels. Even at 4 bytes per pixel uncompressed, that's 50 MB of raw data. JPEG compresses it to ~4 MB, but you can shave another 60% by re-encoding with a smarter encoder and a slightly lower quality setting.
  • Format choice. PNG stores every pixel losslessly. That's right for screenshots with crisp text or icons with transparency. It's wrong for photos — you're spending 4 MB to encode noise that JPEG would happily throw away.
  • Encoder quality. Browser-native JPEG encoders are conservative. MozJPEG (the encoder Zebra uses) applies trellis quantization and progressive scans to get 10–20% smaller files at the same quality. Same picture, smaller file.
  • EXIF metadata. GPS coordinates, camera model, lens, full editing history. Sometimes useful, often hundreds of KB you don't need. Zebra strips most EXIF on re-encode.

The three codecs Zebra uses

Zebra picks the right codec based on your file format and content:

  • MozJPEG — for JPEG inputs and PNG-without-alpha auto-conversion. A Mozilla-tuned fork of libjpeg-turbo with trellis quantization that consistently beats both browser-native encoders and Photoshop's "Save for Web" by 10–20% at matched quality.
  • Oxipng — for PNGs with real transparency. Lossless DEFLATE re-optimization with multiple filter passes. A 1 MB PNG icon set typically lands at 700–800 KB; the data is bit-perfect, just packed tighter.
  • libwebp — for WebP inputs. WebP is already efficient, but re-encoding at a chosen quality target still trims another 20–40%.

All three codecs are compiled to WebAssembly via the jSquash project. They run entirely in your browser tab — no server, no upload, no telemetry.

Auto-mode: PNG → JPEG when it's safe

Most "PNG" files don't actually need to be PNGs. People save photos as PNG thinking "lossless = better quality," then end up with a 4 MB file where a 400 KB JPEG would look identical.

Zebra checks every PNG you drop in: if the alpha channel is fully opaque (no transparency), the file gets re-encoded as JPEG. That's a 5–10× size win on photo-PNGs with no perceptual difference. If the PNG has real transparency (UI mockup, icon, sticker), it stays a PNG — Oxipng re-optimizes it without touching the alpha.

You don't have to choose. Drop the file in. We pick the right path.

Light, Medium, Strong

PresetJPEG qWebP qOxipng levelTypical savings
Light8888230–50%
Medium7878460–80%
Strong6565680–95%

Light at quality 88 is visually identical to the original on any normal screen. Use it for photos you'll print or zoom into, or when you just want to strip metadata and tighten the encoding.

Medium at quality 78 is the default. The output is sharp enough to print at A4, indistinguishable on Retina or mobile. Pick this unless you have a specific reason not to.

Strong at quality 65 introduces visible artifacts on flat areas (skies, walls) if you zoom in 200%+, but is perfect for email, web sharing, and chat where size matters more than pixel-peeping.

Why nothing leaves your device

Most free image compressors — TinyPNG, Compressor.io, ImageOptim Online — upload your file to their server. That model has real costs:

  • Your image lands on someone else's disk. Even with a "deleted in 24h" promise, there's a retention window. For ID photos, screenshots of private chats, or anything proprietary, that window is the wrong window.
  • You upload twice the bandwidth. Up to the server, down from the server. On mobile, that's the slow part.
  • EXIF metadata travels with the file. GPS coordinates from your phone are baked into the JPEG header. When you upload, the server reads them too.

Zebra runs MozJPEG, Oxipng, and libwebp as WebAssembly modules in your browser tab. The image is decoded, re-encoded, and re-bundled locally. No network calls. No retention window. If you go offline after loading the page, compression still works.

JPG vs PNG vs WebP — which to keep

A short decision tree for the format you should save as (after compression):

  • Photo of a real scene, no transparency needed? JPEG. Quality 78–85 is plenty for everything except print.
  • Photo with transparency (rare — usually a cutout)? WebP if your audience uses 2022+ browsers. PNG as the safe fallback.
  • UI screenshot, icon, logo, anything with crisp text? PNG. JPEG ringing artifacts around text are ugly and unfixable.
  • Animation? WebP (or GIF for ancient compatibility). Animated PNG also works but support is patchy.
  • Modern web with full browser-table support? WebP for everything. AVIF when Zebra adds it.

When NOT to compress

  • Master files for editing. Keep originals at full quality. Compress copies. If the only goal is to fit a social-media aspect ratio, often a smarter first step is to crop the photo rather than reduce quality.
  • Already-tiny files. Under 200 KB usually isn't worth it — overhead from re-encoding can cost more than you save.
  • Screenshots with crisp text. JPEG ringing artifacts will ruin the text. Stay PNG and use Oxipng (Zebra does this automatically for screenshots with transparency).
  • Anything you'll print at A3 or larger. Stay at Light or skip compression.

Zebra also detects when re-encoding makes the file bigger (already-optimized PNGs, tiny JPEGs at low quality) and hands you the original back instead of pretending to shrink it.

Common questions

Is it free?
Yes. No watermark, no signup for casual use. Anonymous visitors get 2 compressions per day; signed-in free accounts get 3; premium is unlimited.
Does my photo get uploaded?
No. The compression runs entirely in your browser using WebAssembly codecs (MozJPEG, Oxipng, libwebp via jSquash). The file never leaves your device.
What's the maximum file size?
25 MB per image. That covers nearly every phone photo (a 12 MP JPEG is typically 3–6 MB) and most mirrorless RAW exports.
Does the image quality drop?
Light (q=88) is visually identical to the original on screen. Medium (q=78) is the default — sharp enough to print, indistinguishable on social. Strong (q=65) is for email and web sharing where size matters more than zooming in.
Does it work on iPhone Safari?
Yes. Safari on iOS 16+ runs the WebAssembly codecs. A 10 MP JPEG compresses in 2–4 seconds on an iPhone 13 or newer.
Can I batch compress?
One image at a time today. Batch is on the roadmap; for now, drop, compress, download, repeat.
Why is my PNG so much smaller as a JPEG?
PNG is lossless and doesn't compress photographic data well — a 4 MB PNG often becomes a 400 KB JPEG with no visible loss. Zebra detects PNGs without real transparency and auto-converts them to JPEG. PNGs that actually use the alpha channel stay as PNG (re-optimized with Oxipng).
Why no AVIF support yet?
AVIF compresses better but encoding is slow in WASM (5–10× slower than MozJPEG on the same image). We'd rather ship a fast tool you'll actually use than a slow one with marginally smaller files. AVIF is on the roadmap.
Does it strip EXIF metadata?
Mostly yes — re-encoding through MozJPEG/libwebp drops EXIF by default. Strip-on-purpose is the side effect of getting smaller files, but it's also a privacy win.