Passport photos are the one file every Indian internet user compresses at least once a year — for Aadhaar updates, PAN cards, driving licences, exam forms, visa applications and college admissions. And every single portal has its own KB cap. Miss the number by a few bytes and the form silently rejects you with a red line and no useful error message.
I have spent more evenings than I want to admit helping relatives get a photo under a cap. My father needed a 100 KB Aadhaar upload; the two "free" compressors he tried both delivered 143 KB blobs and one added a watermark across his forehead. A friend needed a 20 KB SSC signature — the site she used uploaded her scan, kept it for 24 hours "for your convenience", and then failed to compress it at all. This guide is what I wish someone had handed her.
The pattern nobody names: crop first, compress second
The single biggest mistake — and I mean single-biggest, across dozens of family WhatsApp threads — is running a full-scene phone photo through a compressor. You end up with a tiny, blurry version of your whole room instead of a sharp, tight portrait. The compressor gets the file size right and everyone blames the compressor.
The reason is arithmetic, not codec magic. A 4000 × 3000 phone photo has 12 million pixels. To fit that into 20 KB, JPEG has to throw away roughly 99.98% of the information. What survives is a smeared potato. If you crop tight first — 300 × 400 pixels — the same 20 KB budget has to describe only 120,000 pixels. Suddenly there's plenty of room per pixel, and the face stays sharp.
So the order matters: crop to the passport frame, then compress. Do it the other way and no compressor on earth can save the result.

The exact caps portals actually use (2026)
This is the list I keep in a note on my phone. Portals do change caps quietly, so always confirm on the actual upload page, but this is where the caps sit as of mid-2026.
Aadhaar photo update (UIDAI SSUP): 100 KB, JPEG, minimum 350 × 450 pixels. Aadhaar signature update: 20 KB, JPEG.
PAN card (NSDL / Protean): photo 20–50 KB, JPEG, 213 × 213 pixels. Signature 10–20 KB, JPEG.
Driving licence (Parivahan Sarathi): 20 KB to 200 KB depending on state, JPEG. Maharashtra caps at 20 KB; Karnataka at 40 KB; Delhi at 200 KB.
SSC and IBPS applications: photo 20–50 KB, JPEG, 200 × 230 pixels; signature 10–20 KB, JPEG, 140 × 60 pixels.
College portals (most Indian universities): 100 KB, JPEG.
US non-immigrant visa (DS-160): 240 KB, JPEG, 600 × 600 to 1200 × 1200 pixels, square.
Schengen visa: 500 KB, JPEG, 35 × 45 mm at 600 DPI.
Miss any of these by even a few pixels or bytes and the form will reject silently. This is not paranoia — the rejection UI on most Indian government portals is one red border and zero information about what went wrong.

Why we built one page per size instead of one big slider
We used to have one "Image Compressor" with a quality slider. It worked, but every time someone wanted a 20 KB PAN photo, they had to think about which slider position lands them at exactly 20 KB. That's not a compression tool — that's homework. And it's homework about a non-linear curve, which humans are famously bad at.
So we split it. One page per common cap, one preset per page, one click. If the portal asks for 20 KB you open /compress-image-to-20kb. If it asks for 100 KB you open /compress-image-to-100kb. Under the hood it's the same engine: BPIE, our binary-search-plus-perceptual-floor solver (we wrote a whole deep dive on how it works). But the user-facing surface is one button.
The design pattern is boring and it works. In the first three months of shipping the split, the drop-off rate on portal-size compression went down more than 60% versus the single-slider tool. Not because the compression got better — the algorithm is identical — but because nobody has to translate their real problem ("my Aadhaar wants 100 KB") into an abstract one ("quality 47, maybe?") anymore.
Why upload-and-forget compressors are actually risky
This is the part people underrate. A passport photo isn't just a photo — it's a biometric attached to your name, and often uploaded next to your Aadhaar or PAN number in the same form. When you drop it into a random "passport photo compressor" site, three things happen that most people don't think about.
One: the file is stored on their server, usually in an S3 bucket, for anywhere from 1 hour to 30 days. Their privacy policy will call this "temporary caching for your convenience". It is a copy of your face on someone else's disk.
Two: the request is logged. IP, user-agent, referrer, filename, dimensions. Even if the image is deleted after an hour, that log row often lives forever, and it links your face's arrival time to your IP address.
Three: if that provider ever gets breached — which happens to small utility sites with alarming regularity — your photo shows up in the dump. Search any breach database for the word "passport" and you will get a queasy feeling.
Bluebird's compressor doesn't do any of this because it can't. The whole thing runs as JavaScript inside your browser tab. Open the Network panel while you compress; you will see zero requests going out. If your device stays offline after the page loads, the compression still finishes. That's the version of "online" that a passport photo actually deserves.

The three edge cases that trip everyone up
First: the EXIF-rotated photo. iPhones save photos in their sensor orientation and rely on an EXIF tag to tell viewers to rotate them. Compressors that don't apply the EXIF rotation before re-encoding save a sideways JPEG. Portals reject it. Bluebird normalises orientation on load.
Second: the PNG-renamed-to-JPG. Screenshots on Windows are PNG by default. Renaming photo.png to photo.jpg does not change the file — it just lies about it, and every serious portal reads the magic bytes and refuses. Convert first (WebP-to-JPG or the format converter both work) and then compress.
Third: the near-target overshoot. You aim for exactly 100 KB and land at 103 KB. Portals do a strict less-than-or-equal check; 103 KB is rejected. Bluebird's solver targets a safety margin — usually 3-5 KB under the cap — for exactly this reason. If you use a different tool, aim for 5% under the number the portal states.
What good actually looks like
A good passport-size compressor should do all of this without asking: read your source (any common format), apply EXIF rotation, let you crop to the required aspect ratio with a visible frame, resize to the exact pixel target, solve for the byte target with a small safety margin, and write a real JPEG with clean metadata. It should also work with your Wi-Fi off. Ours does; several popular alternatives do not.
The whole pipeline — crop, resize, compress, export — runs in one browser tab in about ten seconds on a mid-range phone. Your face never leaves your device. That is the version of "online" we actually want for a passport photo, and the reason this tool exists in the first place.


