Text-in-Image Hider
Hide secret text messages inside images using adaptive LSB steganography. PSNR/SSIM quality report, chi-square vulnerability score, AES-256 encryption. Always outputs PNG.
Drop image or click to browse
PNG, BMP, WebP recommended — max 50 MB (10 MB mobile)
100% client-side — pixel processing happens entirely in your browser via Canvas API. Nothing is uploaded. Output is always lossless PNG.
How to Hide Text in an Image (4 steps)
- Upload any image — PNG, BMP, or WebP recommended (JPEG input is always saved as PNG to preserve hidden data)
- Type your secret message in the text box — capacity updates live as you type
- Choose a preset: Private Message, Watermark, or CTF — or drag the Stealth ↔ Capacity slider
- Optionally enable AES-256 encryption with a password, then click Hide Text in Image and download
Text-in-Image Encoding Methods — What This Tool Handles
| Method | Technique | Quality | Best For |
|---|---|---|---|
| Sequential LSB | Hides payload bits in LSBs of pixels, left-to-right | ~51 dB PSNR at 1-bit — imperceptible | Maximum compatibility with other decoders |
| Seeded Scatter | Pseudo-random pixel order via Mulberry32 PRNG seed | ~51 dB PSNR — defeats chi-square detection | Added security — seed acts as second key layer |
| Adaptive Edge-Priority | Prioritises high-complexity edge regions; avoids smooth areas | 52–57 dB PSNR — highest quality, hardest to detect | Professional watermarking and stealth communication |
| Channel Selection | Encode in R, G, B, or all channels independently | 1/3 capacity per channel vs full (all channels) | Red/Blue channels tolerate more change than Green |
| Reed-Solomon | Error correction so payload survives minor re-processing | +11–43% overhead depending on RS level | Professional distribution where image may be re-saved |
Frequently Asked Questions
Will the image look different after encoding?
No. At 1-bit depth with Adaptive Edge-Priority, PSNR is typically 52–57 dB — completely imperceptible. A post-encode quality report shows exact PSNR, SSIM, and chi-square detectability so you can verify stealth before sharing.
Why is output always PNG, even if I upload a JPEG?
JPEG uses lossy compression that destroys LSB modifications — your hidden text would be wiped on save. Output is always lossless PNG regardless of input format. If you need JPEG compatibility, use a different steganography method.
What does the Stealth ↔ Capacity slider do?
It maps to a complete configuration preset: far left = Adaptive + Blue channel + 1-bit + RS-20 (maximum stealth, less capacity). Far right = Sequential + All channels + 2-bit (maximum capacity, slightly higher detectability). Advanced settings let you override any individual value.
Is my image uploaded anywhere?
Never. All processing uses the Canvas API and a WebWorker entirely in your browser. Your image never leaves the device.
What is a scatter seed?
The seed controls which pseudo-random sequence is used to scatter payload bits across the image. Both encoder and decoder must use the same seed. Think of it as a second independent security layer alongside the AES password.
Will the hidden text survive being uploaded to Instagram or WhatsApp?
No. Instagram, WhatsApp, Facebook, and iMessage re-encode images using lossy JPEG compression, which destroys LSB data. Use Google Drive, Discord (file mode), or direct email attachment instead. The result view shows a platform survival table.
How much text can I hide?
A 1920×1080 image can hold ~760 KB at 1-bit depth with all channels. At 2-bit, that doubles to ~1.5 MB. The capacity bar updates live as you configure. Adaptive method has ~65% of sequential capacity due to edge-pixel restriction.
What is a chi-square vulnerability score?
After encoding, the tool runs the chi-square steganalysis attack on your output. It shows what a professional steganalysis tool would see. A p-value above 0.5 means sequential LSB is detectable. Use Adaptive or Scatter method to reduce this score.