Image Steganography — Hide Text in a Picture
Hide a text message in an image's pixels with least-significant-bit steganography, then extract it back later — the output is always a lossless PNG.
🔒 Everything runs in your browser — your image and message are never uploaded.
The result always downloads as PNG. PNG is lossless, so the hidden bits are preserved exactly — never re-save it as JPEG or WebP, whose lossy compression rewrites the pixels and destroys the message.
Drop the cover image here or click to choose
Hide a secret message inside an image
Image Steganography tucks a text message — or any file — into the least-significant bit (LSB) of an image’s red, green and blue channels — or, with “Bits per colour channel” raised, into the lowest few bits of each. At the default, each pixel’s colour shifts by at most one step out of 256 — invisible to the eye — yet across thousands of pixels there’s room for a whole note; a deeper setting multiplies that room, at the cost of grain that can show in smooth areas. Switch to Reveal, drop the carrier back in, and the hidden text is read straight back out, ready to copy or save as a text file — the depth it was written at is recorded in the picture, so nothing has to be remembered. A Clear button — beside “Hide message & download PNG” when hiding, and under the picture once one is in when revealing — empties the tab: the picture, the message or chosen file, and the password. It’s a classic CTF and privacy trick: the picture looks completely ordinary, so nobody knows a message is there unless they go looking.
Private by design, and why PNG matters
Everything happens on a canvas inside your browser — the cover image and your secret text are never uploaded. The result always downloads as a lossless PNG, because JPEG and WebP use lossy compression that rewrites the pixels and would wipe out the hidden bits. Keep and share the PNG as it is; re-saving it in a lossy format, or editing it, destroys the message. The cover itself can be a JPG, a WebP or any other picture your browser opens — only the result has to be PNG. On its own this is concealment, not encryption — anyone who suspects LSB steganography can extract the text — so for anything secret, set a password: the payload is then encrypted with AES-GCM before it is hidden. To make the picture smaller before hiding a message in it, resize it first in the bulk image converter.
Frequently asked questions
How is the message hidden in the image?
Each character is turned into bits, and those bits are written into the least-significant bit of the red, green and blue value of successive fully opaque pixels — the transparency channel is left untouched, and a pixel that is even slightly see-through is skipped, because a browser canvas cannot hand those bits back unchanged. Changing only the last bit shifts each colour by at most 1 in 256, which the eye cannot see, but the exact pattern can be read back out later. That is the default; a higher “Bits per colour channel” writes the message into the lowest few bits of each channel instead, while the short header at the start stays in the last bit alone, so Reveal reads the depth before anything else.
Why must I keep the result as a PNG?
PNG is lossless, so every pixel — and therefore every hidden bit — is preserved exactly. JPEG and WebP are lossy: they re-compress the image and rewrite pixel values, which erases the least-significant bits and destroys the hidden message. Never convert or re-save the carrier in a lossy format.
Is this the same as encryption?
No. Steganography hides the existence of a message; it does not scramble it. Anyone who suspects an image carries LSB-hidden data can extract it with a tool like this one. If the content is sensitive, set a password and the page encrypts it before hiding it.
How long a message can I hide?
It depends on the image size and on “Bits per colour channel”: at the default, three bits fit per fully opaque pixel — one in each of the red, green and blue channels — minus a small header, so an opaque 1000×1000 image holds roughly 375,000 bytes of text, and each step up the setting adds about that much again. Transparent areas carry nothing, so a cut-out logo or an icon holds less, and the counter shows the real figure for the picture you dropped and how much you have used; the tool refuses to embed a message that would not fit.
Can I protect the hidden message with a password, or hide a file?
Yes. Set a password and the payload is encrypted before it is hidden, so only someone with the password can read it. Switch to File to hide any file; revealing it gives the same bytes back under its name.
Can I fit a longer message into the same picture?
Yes. Raise “Bits per colour channel” above the default and each channel carries more of the message, so the room grows by the number you pick, and the byte counter follows it. The price is that a channel can then move by more than a single step, which can show as grain in smooth areas, so the lowest setting that fits is the least visible. Reveal reads the setting back from the picture, so there is nothing to remember or type in.