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
- Open the image compressor.
- Drag in a JPG, PNG, or WebP (up to 25 MB).
- 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
| Preset | JPEG q | WebP q | Oxipng level | Typical savings |
|---|---|---|---|---|
| Light | 88 | 88 | 2 | 30–50% |
| Medium | 78 | 78 | 4 | 60–80% |
| Strong | 65 | 65 | 6 | 80–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.