StegoToolkit

Bit Plane Viewer

Slice an image into its bit planes: a channel × bit overview grid, composites, a reconstruct slider and a payload-extent strip. Exact PNG, BMP and GIF decoding.

All planes
Composites
Extent strip
Bit plane viewer

Drop an image here, paste it (Ctrl/⌘+V), or

PNG, BMP and GIF are read exactly · JPEG, WebP and AVIF are approximate · up to 20 MB and 50 megapixels · processed in your browser

Try a sample

How to use the bit plane viewer (5 steps)

  1. Load an image: Drop a file, pick one, paste from the clipboard or try a sample. PNG and BMP samples and GIF palette indices are read exactly from the file's stored values; JPEG, WebP and AVIF go through the browser and are flagged as approximate.
  2. Scan the overview grid: Every channel and bit appears as a thumbnail with its density and entropy. Thumbnails are block-averaged, so a sparse scatter of set bits still shows up. Click a cell to inspect it; Shift-click to add it to a composite; use the row and column buttons to select a whole channel or a whole bit position.
  3. Inspect one plane: Zoom up to 32× (buttons, Ctrl + wheel or a two-finger pinch), pan, step through planes with the arrow keys, and hover or click a pixel to see every channel's bits. The statistics, the payload-extent strip and the bit peek all follow the plane you are looking at.
  4. Compose or reconstruct: Combine any planes with OR, AND or XOR, stack one bit position as a colour picture, or rebuild the image from only its top planes to see what each plane contributes.
  5. Take it further: Download the plane as a PNG (full resolution), a contact sheet of the plane thumbnails or a JSON report of the statistics, or send the file on to another tool.

Bit Plane Slicing Online: What You See and How to Use It

Exact or approximate, at a glance: PNG and BMP samples and GIF palette indices are read straight from the file, so the planes show the stored values; JPEG, WebP and AVIF are decoded by the browser first, so their values can differ slightly and a banner says so. That difference decides whether an LSB conclusion is safe, which is why it is stated before anything else.

An 8-bit colour channel stores each pixel as a number from 0 to 255, and that number is eight bits. A bit plane takes one of those eight positions — say bit 7, the most significant, or bit 0, the least significant — and draws it for every pixel as a black-and-white picture: white where the bit is 1, black where it is 0. A normal RGB image therefore has 24 planes (three channels times eight bits), an RGBA image has 32, and an 8-bit gray image has 8. This page shows all of them side by side in an overview grid, then lets you open any one at full resolution.

Start with the grid. Each cell is one plane, labelled such as R bit 0, with the share of set bits (density) and a Shannon entropy figure underneath. The cells are density thumbnails: when a large image is shrunk to fit, each thumbnail pixel is the average of the block of bits it covers, not a single sampled bit, so one stray line of noise cannot vanish in the downscale. Click a cell to open it in the single-plane viewer, where the picture is drawn pixel for pixel with nearest-neighbour scaling. Nothing is smoothed, because smoothing would destroy exactly the detail you came to look at.

Keyboard stepping follows the usual order for this kind of viewer: Left and Right move to the next or previous bit, Up and Down move to the next or previous channel. The pixel inspector under the image lists the binary value of every channel at the pixel you hover over, with the bit you are viewing highlighted, and a click pins it.

Reading a Bit Plane: Structure in the High Bits, Noise in the Low Bits

In an ordinary photograph the high planes carry the picture. Bit 7 of the red channel is, in effect, a thresholded copy of the red channel: large smooth regions of white and black that follow the shapes in the scene. Moving down, bit 6 and bit 5 still look like the image but with finer banding. By the time you reach bits 1 and 0 the plane usually looks like television static, because the lowest bits record sensor noise, rounding and compression residue rather than scene content.

The tool puts three numbers on that impression. Density is the share of pixels whose bit is 1. Entropy is the Shannon entropy of the bit distribution, from 0 (every bit the same) to 1 (exactly balanced). Transition rate is the share of horizontally adjacent pixel pairs whose bit differs: a smooth high plane changes rarely, so its transition rate is low, while a noise-like plane changes about half the time. The longest run of identical bits in raster order is shown too. A short reading line combines them into constant, structured, noise-like or mixed. Treat it as a hint: a noise-like low plane is normal for a photograph, so noise alone proves nothing, and a perfectly structured low plane does not prove nothing is hidden.

View the LSB Plane of an Image: What Hidden Data Can Look Like

People who hide data in the least significant bit usually overwrite the low bit of successive pixels, starting at the top-left corner and moving along each row until the message runs out. That leaves a recognisable shape in the bit 0 plane: the upper part looks like random static while the lower part still looks like whatever the image would have looked like without the message. Where the static stops is roughly where the message ends.

The payload-extent strip is built for exactly this. It cuts the plane into up to 256 equal blocks in raster order, plots each block's entropy as a thin strip under the image, and marks a boundary only when the plane switches between low and high entropy and then stays there for at least three blocks. If it finds one it shows an approximate bit and byte count for the span. It will say No clear boundary when it finds none, and that wording is deliberate: a missing boundary is not evidence that the image is clean, because a payload spread across the whole plane, or a carrier whose low plane is already noisy, produces no visible edge.

Read the size estimate with its assumptions in mind. It counts one bit per pixel of the plane or composite on screen, in the pixel order you chose, so it is the length of the noisy span, not a recovered payload length. It does not include headers, encryption overhead or compression, and it does not undo multi-channel embedding: if a tool wrote its bits round-robin across red, green and blue, each single-channel plane shows only about a third of the payload. In a test with known payloads embedded in a flat low plane, the estimated span landed within about one block (192 bits on a 256 by 192 image) of the true length for payloads from about 100 bytes up, for both random bytes and plain text; spans shorter than three blocks are not flagged at all.

Other patterns worth recognising: a plane in which you can read a picture or text outright, which usually means someone deliberately put an image into one bit position; a regular grid or QR-like texture; or a plane that is completely flat when its neighbours are not. For anything that looks like a payload, the bit peek reads the next 64, 128 or 256 bits from a pixel you choose as bits, hex and ASCII, in either bit order. That is a preview to confirm that a plane holds something, not an extraction; the dedicated extractor tools linked below handle channel order, bit depth and traversal options.

Why JPEG Bit Planes Mislead

JPEG does not store pixel values. It stores quantised frequency coefficients for 8-by-8 blocks and reconstructs pixels when the file is opened. The reconstruction rounds, and the rounding usually changes the low bits of many pixels, so the bit 0 plane of a JPEG is dominated by compression artefacts. A spatial LSB payload written into the pixels before saving as JPEG is therefore likely to be corrupted or destroyed, and the reconstructed LSB plane cannot reliably represent the original pixel values; how much survives depends on the quality setting, any other edits and the payload. The same applies to lossy WebP and to AVIF.

For that reason the viewer does not treat these formats like PNG. They are decoded by the browser and a banner states that pixel values may differ slightly from the file and that LSB conclusions should not be drawn from the view. JPEG gets an extra explanation. When you have a choice, work from the lossless original: PNG, BMP or GIF are read straight from the file's stored samples.

Why Some Viewers Show Slightly Different Pixels

A browser decodes images for display, and display means applying colour management, possibly honouring an orientation tag, and compositing with alpha. Canvas-based decoders also commonly hold pixels with premultiplied alpha, where a semi-transparent pixel's red, green and blue are scaled by its alpha and then scaled back when read. The round trip is not always exact, so the colour of a semi-transparent pixel can change by a few units — which is enough to flip a low bit.

The exact path avoids every one of these. For PNG the tool parses the chunks itself, validates every CRC and reports the chunk that fails, inflates the image data, undoes the scanline filters and reads the samples directly. Gamma, colour-profile and transparency chunks are ignored on purpose, so a plane shows the number that is in the file. BMP rows are un-padded and flipped to top-down; GIF palette indices are read from the stored image data. The palette indices are exact, but frame compositing and disposal are the viewer's own approximation (see Limitations). The decoder also checks the decompressed size against the size the header implies, so a small file that claims to expand to gigabytes is refused rather than allocated.

Rebuild an Image from Its Top Bit Planes

The reconstruct slider is the classic bit-plane-slicing exercise. Keep only the top N planes of each channel and zero the rest, or mirror it by removing the lowest N planes, and the page shows the result beside the original with the largest per-pixel error that setting can cause. Keeping the top four planes of an 8-bit channel can be off by at most 15 on any pixel, because the four dropped planes hold values 8, 4, 2 and 1 and 8 + 4 + 2 + 1 = 15. Keeping only the top plane leaves two values per channel and the picture collapses to a posterised outline. A difference preview amplifies the gap so you can see where the dropped planes mattered.

This is also a quick test of where an image keeps its information. If dropping the lowest four planes barely changes the picture, the low planes carry little of the visible content, which is the normal case for a photograph and the reason low-bit data hiding is hard to see by eye.

Where to Go Next After Reading the Planes

This viewer is for looking and understanding. When the planes suggest something, move to a tool built for the next job: the LSB Extractor recovers payloads with explicit channel, bit and ordering settings; StegSolve and Zsteg run their full sets of extraction and combination tricks; the Steganography Detector applies statistical tests such as chi-square and RS analysis to give a measured suspicion level; the Hex Viewer shows the raw bytes of the file, including anything appended after the image data; and the EXIF Viewer reads the metadata. The Hex Viewer, LSB Extractor, StegSolve, Zsteg and Steganography Detector open with the file from this page already loaded; the EXIF Viewer opens empty, so load the file there. To practise on a file you know contains a message, embed one first with the LSB Embedder, the Color Channel Hider or the Image Steganography Hider, then open the result here and look at the extent strip.

One reasonable order for an investigation, not a mandatory one: look at the planes here to spot structure and a possible payload boundary; run the Steganography Detector for statistical evidence of LSB embedding; try the LSB Extractor with the channel, bit depth and traversal the planes suggest; and open the Hex Viewer to check the raw bytes and anything appended after the image data. Real challenges often need a different path.

Which Formats Are Read Exactly

Exact means the planes show the samples stored in the file; approximate means the browser decoded the image first.

FormatDecodingDetails
PNGExactAll colour types, 1–16 bit depths, interlaced or not
BMPExact1/4/8-bit palette, 16/24/32-bit, bitfields, either row order
GIFExact palette indicesFrame compositing and disposal are approximated; frame picker for animations
JPEGApproximateCompression usually changes the low bits
WebP / AVIFApproximateDecoded by the browser
TIFF / PSD / RAWNot supportedConvert to PNG first

Examples

Input: Pixel value 165

Result: binary 10100101 · planes bit 7→0: 1, 0, 1, 0, 0, 1, 0, 1

Meaning: Each bit position is one plane: bit 7 is 1, bit 6 is 0, and so on down to bit 0, which is 1.

Input: 165, keep only the top 4 planes

Result: 160 (10100000)

Meaning: The low four planes are zeroed. The largest possible error for this setting is 15; here the error is 5, the value of the dropped bits 0101.

Input: 165, keep only the bottom 4 planes

Result: 5 (00000101)

Meaning: The bottom nibble on its own. Top nibble plus bottom nibble: 160 + 5 = 165.

Input: 165 as Gray code (v XOR v>>1)

Result: 247 (11110111)

Meaning: Gray-coded planes change one bit between neighbouring values, which can make a slowly varying region easier to inspect. Decoding 247 returns 165.

Input: Red values 200, 201, 200, 200, 200, 200, 200, 201

Result: LSBs 0 1 0 0 0 0 0 1 → 01000001 → ASCII A

Meaning: The bit peek reads these LSBs MSB-first as 0x41, the letter A. Read LSB-first the same bits give 10000010, which is 130 — the bit order setting matters.

Input: A plane with exactly half its bits set

Result: density 0.5 · entropy 1.0

Meaning: Maximum entropy. A plane with a quarter of its bits set has entropy about 0.811; an all-zero or all-one plane has entropy 0.

Input: Alternating bits 0,1,0,1… across each row

Result: density 0.5 · entropy 1.0 · transition rate 1.0

Meaning: Balanced and changing at every step: every adjacent pair differs, so the transition rate is 1.0. Random balanced bits typically sit near 0.5, and smooth or repeated regions sit lower.

Input: 8-bit RGB / RGBA / Gray image

Result: 24 / 32 / 8 planes

Meaning: Channels × 8 bits. A 16-bit RGB PNG has 48 planes and 16-bit RGBA has 64.

Input: RGB (255, 128, 0) as luminance (Rec. 601)

Result: 151

Meaning: 0.299×255 + 0.587×128 + 0.114×0 = 151.4, rounded. The derived Luminance channel has its own eight planes.

Input: Keep top 4 planes of an 8-bit channel

Result: maximum error 15

Meaning: The dropped planes are worth 8 + 4 + 2 + 1 = 15, so no pixel can be further than 15 from the original.

Input: 2×2 BMP stored bottom-up

Result: decoded top-down in raster order

Meaning: BMP stores the last row first. The decoder flips it so the first sample of every plane is the top-left pixel.

How it works

1. Check limits and format

The file is refused before decoding if it is over 20 MB or over 50 megapixels. The format is recognised from its signature bytes, not its file name. TIFF, PSD and RAW are rejected with a message that names the format and suggests converting to PNG.

2. Decode exactly where possible

PNG (all colour types, 1–16 bits, interlaced or not), BMP (1/4/8-bit palette, 16/24/32-bit, bitfields) and GIF are decoded by the page's own code so samples equal the stored values. Everything else is decoded by the browser with orientation and colour conversion switched off where the platform allows, and is labelled approximate.

3. Derive planes

A plane bit is (sample >> bit) & 1. Planes are derived on demand from the sample arrays and cached; the grid fills in progressively so the first paint is fast. Palette images offer index planes or resolved RGB planes, defaulting to RGB.

4. Measure

Density, binary Shannon entropy, horizontal transition rate and longest run are computed per plane. The extent strip computes entropy for up to 256 blocks along the chosen pixel order and looks for a sustained shift.

5. Compose and reconstruct

A composite is a per-pixel OR, AND or XOR over up to 32 chosen planes. Reconstruct masks the low bits of each channel, with the maximum error 2^k − 1 for k cleared bits.

6. Display and export

The viewer scales with nearest-neighbour only; thumbnails use block averaging. Exports are rendered from the data at full resolution, not from the zoomed screen.

What the results mean

ResultWhat it meansWhat to do
ConstantEvery bit in the plane is the same (density 0 or 1)Normal for a flat region or a quantised image; compare with neighbouring planes
Looks structuredNeighbouring bits mostly agree, so the transition rate is lowExpected for high planes; a structured low plane may be a picture or text hidden on purpose
Looks noise-likeBalanced bits with a transition rate well above a smooth plane's (random bits sit near 0.5)Normal for the low planes of a photograph; look at the extent strip for a boundary
MixedSome structure and some noiseCompare other channels and use the extent strip to see where each part is
Noise begins / ends at block NEntropy shifted for at least three consecutive blocksA hint that something was written from the top-left; open the bit peek at that position
No clear boundaryNo sustained shift was foundNot proof of anything: a payload can fill the whole plane or hide in an already noisy one
All ones (opaque)Every pixel is fully opaque, so the alpha plane is 1 everywhereIt contains no varying transparency information; this says nothing about whether other channels hide data
Approximate path bannerThe browser decoded the image; values may differ from the fileDo not draw LSB conclusions; find a lossless original
Maximum error 15The most any pixel can differ after dropping four planesIncrease the planes kept to shrink the bound

Limitations

  • Files over 20 MB and images over 50 megapixels are refused before any decoding. The single-plane viewer asks for only the visible part of the plane, so a very large image never needs a full-size canvas; zoomed-out views are block-averaged densities, not sampled pixels.
  • Only PNG and BMP samples and GIF palette indices are decoded exactly. JPEG, WebP and AVIF are decoded by the browser and can differ from the file; lossy formats usually change the low bits, so their LSB planes say little about any original payload.
  • TIFF, PSD and camera RAW files are not supported; convert them to PNG first.
  • Palette PNG, BMP and GIF files offer either the palette-index planes or the resolved RGB planes, not both at once. RGB planes are the default.
  • The tRNS transparency chunk of a PNG is ignored on purpose so that planes show the stored samples.
  • Animated GIF: palette indices are read exactly, but the frame picker composites frames by index and treats the disposal method 'restore to previous' like 'do not dispose', so a displayed frame may differ from the original animation's intended compositing.
  • 16-bit PNG opens in an 8-bit high-byte view by default (8 planes per channel: 24 for RGB, 32 for RGBA). Switch to the full view for all 16 bits per channel (48 planes for RGB, 64 for RGBA); the two views are not the same representation.
  • The payload-extent estimate assumes one bit per pixel in the plane or composite on screen, in the chosen pixel order. It does not account for headers, encryption, compression, multi-channel embedding (with RGB round-robin embedding each plane holds roughly a third of the payload) or other embedding patterns, and it only flags a span of at least three blocks. Treat it as an approximate extent of noise, not a recovered payload length.
  • The statistics are hints. A noise-like plane does not prove hidden data, and a structured plane does not prove there is none. The tool never labels a plane 'encrypted' or 'hidden'.
  • The bit peek is limited to 256 bits of a single plane. It does not extract a message, combine channels, handle encryption or try passphrases; use an extractor tool for that.
  • A composite combines at most 32 planes. Audio bit-plane statistics belong to the audio tools and are not part of this page.
  • Nothing here embeds or hides data. To make test material, embed a message with the LSB Embedder, the Color Channel Hider or the Image Steganography Hider, then open the result here and look for the noise boundary.

Privacy

Your image is processed locally in your browser and is not sent to our servers: decoding, plane extraction and statistics run in a Web Worker on your device, the file name and any PNG text are shown as plain text, and nothing about the image is put in the page address or sent to analytics (only feature names such as plane_selected are counted). The image lives in memory for the current page only. If you use Send to another tool, the file's bytes (at most 20 MB) are stored in your browser's IndexedDB so the next page can read them; they are not sent to a server. The receiving tool reads them once and deletes them. If nothing opens them, the next page ignores them after 30 minutes, but they stay in IndexedDB until a page uses them, a newer hand-off replaces them or you press Clear session data. Only display preferences (invert, tint, colour map, thumbnail size) are remembered in this browser's localStorage — never the image or anything derived from it.

Frequently Asked Questions

How do I view the bit planes of an image?

Drop the image on the page (or paste it, or try a sample). The overview grid shows every channel and bit as a thumbnail, and clicking a cell opens that plane at full resolution with zoom, pan and a pixel inspector. A normal 8-bit RGB image has 24 planes, RGBA has 32 and gray has 8.

What is the difference between the MSB plane and the LSB plane?

The most significant bit (bit 7) is worth 128 and carries most of the visible picture, so its plane looks like a thresholded copy of the image. The least significant bit (bit 0) is worth 1 and mostly records noise and rounding, so its plane usually looks like static. Changing the LSB of a pixel changes its value by at most 1, which is why it is a favourite place to hide data.

How can I tell whether an LSB plane contains hidden data?

Look for a boundary rather than for noise alone. Natural photographs have noisy LSB planes, but data written from the top-left leaves noise in the upper part and the image's own pattern below. The payload-extent strip marks a sustained entropy change as a hint. Even then it is only a hint: use the Steganography Detector for statistical tests and an extractor to try to read the bits.

Why does my JPEG's LSB plane look like noise?

JPEG stores quantised frequency coefficients, not pixels, so the bit 0 plane of a JPEG is mostly compression residue. A pixel-level LSB payload written before saving as JPEG is likely to be corrupted or destroyed; see the section on why JPEG bit planes mislead.

Which image formats give exact results here?

PNG and BMP samples and GIF palette indices, which the page parses itself (gamma, colour profiles and transparency chunks are ignored). Animated GIF frame compositing is approximate. JPEG, WebP and AVIF are decoded by the browser and marked approximate by a banner.

Why does a browser-decoded image sometimes show slightly different values?

Browsers apply colour management, may honour orientation tags and often hold pixels with premultiplied alpha, so a semi-transparent pixel's red, green and blue can change by a few units on the way through a canvas. A few units are enough to flip a low bit. The exact path avoids all of that.

What do density, entropy and transition rate mean here?

Density is the share of pixels whose bit is 1. Entropy is the Shannon entropy of that 0/1 distribution, from 0 to 1; exactly half set gives 1.0 and a quarter set gives about 0.811. Transition rate is the share of horizontally adjacent pixels whose bit differs: random balanced bits sit near 0.5, a perfectly alternating pattern is 1.0 and smooth regions are lower. They describe structure, not meaning.

What is the payload-extent strip?

A thin strip under the plane showing the entropy of up to 256 blocks in raster order (or in column, serpentine or Hilbert order). When the plane shifts from low to high entropy, or back, and stays there for at least three blocks, it marks where noise begins or ends and estimates the span at one bit per pixel of the plane shown. It is a hint, not a recovered length, and 'No clear boundary' does not mean the image is clean.

How do I rebuild an image from only its top bit planes?

Open the Compose step and use the reconstruct slider to keep only the top N planes of each channel, or to remove the lowest N. The rebuilt image appears next to the original with the largest possible per-pixel error for that setting; for example keeping the top four planes can be off by at most 15.

What does the composite OR / AND / XOR view show?

It combines the planes you selected, pixel by pixel, into one black-and-white image and writes the formula above it, for example R0 XOR G0 XOR B0. XOR of the three LSB planes, for instance, is 1 wherever an odd number of the three low bits are set. Up to 32 planes can be combined.

Can this tool extract the hidden message?

Not fully. The bit peek reads the next 64, 128 or 256 bits of one plane from a pixel you choose, as bits, hex and ASCII, so you can confirm that a plane holds readable data. Full extraction with channel order, bit depth and ordering options is done by the LSB Extractor, StegSolve and Zsteg.

Does it work with 16-bit PNG or animated GIF?

Yes. A 16-bit PNG opens in an 8-bit high-byte view by default (24 planes for RGB, 32 for RGBA) and can be switched to the full 16 bits per channel (48 for RGB, 64 for RGBA). An animated GIF has a frame picker that shows each frame's exact palette indices, with approximate compositing.

Is my image uploaded to a server?

Your image is processed locally in your browser and is not sent to our servers. If you use Send to another tool, the file is stored in your browser's IndexedDB so the next page can read it; it is not sent to a server.

How is this different from StegSolve or the LSB Extractor?

This tool is for exploring and understanding bit planes: the grid, composites, the reconstruct slider and the extent strip. StegSolve and the LSB Extractor are built for extraction workflows with many options. Use whichever matches the job, and hand the file between them.