A blind watermark is a message — usually text or another image — secretly embedded inside a “carrier” photo in a way that leaves the photo looking identical to the naked eye. The word blind means the original carrier is not needed to recover the message: you just hand the photo to the extractor and the data comes back.
If you’ve ever wondered how that works, you’re in the right place. It turns out the trick is one of the simplest ideas in image processing, and you can try it yourself in 30 seconds with the Piick blind watermark tool.
The envelope-and-stamp analogy
Think of a postcard. The picture on the front is the carrier image. The message you want to hide is a tiny note that you slip under the stamp — invisible until someone knows to lift it. A blind watermark does the same thing to a digital photo: it hides the note under a layer that your eye never inspects.
LSB: hiding a bit in the noise
Every pixel in a color photo has three channels — R, G, B — each stored as a number from 0 to 255. That number is the brightness of that color channel.
Here’s the key insight: changing the value by ±1 is invisible to the human eye. 124 vs 125 red? No one can tell. 200 vs 201 green? Identical. So if we want to sneak a 0 or a 1 into each channel, we replace the last bit of the number with the bit we want to send. That last bit is called the least significant bit, or LSB.
A single pixel gives us 3 channels × 1 bit = 3 secret bits per pixel. A modest 500×500 photo has 250,000 pixels, so 750,000 bits = about 91 KB of hidden space. Enough for a paragraph of text. Not enough for a 16 MB photo (more on this below).
How the message gets in
The embedder turns your message into a stream of bits:
- Write the length of the message in the first 32 bits (so the extractor knows when to stop).
- Append the actual message bytes.
- Pad the rest with random bits so the unused space doesn’t leak the message boundary.
- Walk the pixels in some order (optionally shuffled by a password), and for each one, replace the LSB of R, then G, then B with the next bit of the stream.
To recover the message, the extractor does the same walk in reverse, reads 32 bits to learn the length, then reads that many bytes.
Why PNG is mandatory
If you take a watermarked photo and save it as JPEG, the watermark disappears. Why?
JPEG is a lossy format — it shrinks files by discarding details the eye is unlikely to notice. Round 124 to 123, round 200 to 199, average neighbouring pixels… exactly the kind of small LSB changes we made. JPEG is, in effect, un-writing our hidden message.
PNG, on the other hand, is lossless. Every byte that goes in comes out unchanged. That’s why blind watermark tools always output PNG and why you must re-export to PNG every time you want to keep the watermark.
Copy a postcard → still readable. Photocopy a postcard → the postmark blurs out. PNG is the original; JPEG is the photocopy.
Why the carrier has to be huge
LSB gives us 3 bits per pixel. To embed a 1 MB payload you need at least 1,000,000 × 8 / 3 ≈ 2.7 million pixels — about a 1650×1650 image. To embed a 16 MB payload (a big 2048×2048 PNG with alpha) you need roughly 44 megapixels worth of carrier, which is why a 500×500 cover fails immediately: it has only 91 KB of capacity, three orders of magnitude too small.
When you upload a cover image to Piick’s tool, the loaded card shows the carrier’s capacity in real time, so you can check before you click Embed.
A password is not encryption
If you tick the password field, Piick shuffles the pixel order using a deterministic random sequence derived from your password. Without the password, the extracted bytes look like noise — the 32-bit length header won’t parse, so the extractor will report “no watermark found.”
This is obfuscation, not encryption. Anyone who knows the technique can still fish the bits out one by one and try every possible password offline. For casual sharing (keeping a private note inside a public image) it’s plenty. For anything sensitive, use real encryption first.
Try it yourself
The whole technique runs in your browser in a few hundred lines of JavaScript. Open the Piick blind watermark tool, drop in any PNG, type a short note, and click Embed. The output PNG looks identical — but open the extract tab and the note comes right back.
Want a hands-on walkthrough instead? Read the step-by-step how-to guide.
Everything described above happens locally in your browser. Piick never uploads your images.