RGB Channel Splitter
Split, inspect, swap and recombine RGB image channels in one browser-based tool: labelled Red, Green, Blue and Alpha tiles, invert, Combine from separate images, CMYK/HSV/HSL views and a two-image difference. Exact PNG and BMP decoding.
This tool separates and recombines the color channels already visible in an image. It does not hide or search for secretly embedded data — for that, see the Color Channel steganography tools.
Drop an image here, paste it (Ctrl/⌘+V), or
PNG and BMP are read exactly; GIF (first frame) is read by this tool; JPEG, WebP and AVIF are decoded by the browser · up to 25 MB and 16,777,216 pixels in total (for example 4096 × 4096 or 8192 × 2048) · processed in your browser
How to split and combine image channels (5 steps)
- Load an image: Drag in a file, choose one, paste an image from the clipboard or start from a built-in sample. PNG and BMP are read exactly from the file's own samples, the first frame of a GIF is read by this page's own code, and JPEG, WebP and AVIF go through your browser's decoder (a banner says so). Limits are listed under Limitations.
- Split and inspect: Each channel appears as a labelled tile with its minimum, maximum and mean. Switch between grayscale and channel colour, invert a channel, expand a tile to full size and click any pixel to read its values. CMYK, HSV and HSL views are available for colour images.
- Combine or swap: Fill the Red, Green, Blue and optional Alpha slots from the loaded image's channels or from separate images, choose original or inverted values per slot, and combine. One click swaps channels, for example Red and Blue. The output is always an RGBA PNG.
- Compare two images: Load a second image of the same size to see, per channel, which pixels differ and by how much.
- Export: Download a channel as a reusable grayscale PNG, a ZIP with one PNG per channel, a labelled contact sheet, the combined image, or the per-pixel values as CSV or TXT.
RGB Channel Splitter and Combiner: What You Can Do With a Channel
A colour image stores each pixel as a few numbers. In an RGB image those are three whole numbers from 0 to 255 — how much Red, Green and Blue the pixel contains — and many formats add a fourth, Alpha, for transparency. A channel is one of those numbers taken for every pixel and drawn as its own picture. Splitting an image into channels answers a simple question: what does each of those numbers look like on its own?
This page does four things with them. It splits an image into labelled channel tiles with simple statistics; it inverts a channel (255 minus each value) for inspection; it swaps channels, for example putting the Blue values into the Red slot; and it combines channels, taken from the loaded image or from separate files, back into one RGBA image. Split, inspect, swap and recombine all happen in one place, and the image never leaves your browser.
Everything here works on whole 0–255 values. It never looks inside a value's individual bits (the Bit Plane Viewer does that), it never hides or searches for a secret message (the Color Channel steganography tools do that), and it does not draw histograms. If a channel looks suspicious, the Next steps tab points to the tools that dig deeper.
Reading the Channel Tiles: Why Red Looks Gray
A channel is a single number per pixel, so by default each tile is drawn as a gray picture: 0 is black and 255 is white. That is why the Red tile of a red-and-blue photograph looks like a black-and-white version of it: bright where the original had a lot of red, dark where it had none. Switch the display to In channel color to tint the tile instead (Red as value, 0, 0; Green as 0, value, 0; Blue as 0, 0, value). The tint is only a different way of drawing the same numbers.
Alpha has no colour of its own, so its tile is always gray: white means fully opaque and black means fully transparent. Gray and the derived CMYK, HSV and HSL channels are also always gray. Every tile carries a text label (Red (R), Green (G), Blue (B), Alpha (A) or Gray), so you never have to rely on tint alone to tell the tiles apart.
Under each tile you see the smallest value, the largest value and the mean, with a note saying whether they describe the Original or the Inverted values. The sample image below shows how this works: its Red channel is 255, 0, 0, 255, 10, 255 for the six pixels, so min 0, max 255, mean 129.1667; inverting turns each value v into 255 − v and the mean into exactly 125.8333.
A useful habit: look at a channel at full size, then at its inverted version. Large flat areas, a pattern that is faint in one channel but strong in another, or a shape that appears in only one channel are all worth a closer look. They are leads, not proof of anything hidden: photographs often have uneven channels simply because of lighting and colour.
Which Channels an Image Has, and Why
The tiles shown depend on how the file stores its colour, and the Load tab says which and why. A plain grayscale PNG stores one value per pixel, so you get a single Gray tile rather than three identical ones. A gray-plus-alpha PNG gives Gray and Alpha. RGB and RGBA PNGs give Red, Green, Blue (and Alpha). A palette image (PNG with a colour table, an 8-bit BMP, a GIF) stores a colour-table index per pixel; the tool looks each index up in the table, so the Red, Green and Blue tiles hold the colours the table actually contains, never the index number itself.
Transparency depends on the type. A PNG with a tRNS chunk behaves in one of two ways. In a palette PNG the chunk lists an alpha value for each colour-table entry, so the tool shows a real Alpha tile built from those values, even when every pixel happens to be fully opaque. In a grayscale or RGB PNG the chunk names a single transparent colour, a binary key and not an alpha channel, so no Alpha tile is offered; the Load tab reports the key and how many pixels match it. The match is made on the sample stored in the file at its own bit depth, before any scaling.
A 32-bit BMP has a fourth byte per pixel that the format reserves and does not define as alpha. This tool never uses it as transparency, including in Combine; a Show reserved byte switch lets you look at it, labelled Reserved byte (not alpha). JPEG has no transparency at all. For WebP and AVIF an Alpha tile appears when the decoded image has transparent or partly transparent pixels, or when the file's own header declares an alpha channel. For a GIF only the first frame is used. Pixels that frame does not paint, whether because of a transparent colour index or because they lie outside the frame's rectangle, count as transparent and give an Alpha tile. That is how Chromium, Firefox and WebKit all drew a test GIF whose frame was smaller than its screen; the GIF's logical-screen background colour is not used.
Bit depths below 8 are expanded to 0–255 by exact whole-number factors: 1-bit gray multiplies by 255, 2-bit by 85 and 4-bit by 17, so no rounding ever happens. A 16-bit PNG shows the high byte as the 8-bit value and keeps the full 16-bit samples; a switch on the Split tab makes the statistics, the inverted values and the grayscale downloads (single channel, ZIP and pixel table) use those full samples, and Combine has its own Output precision setting.
Combine and Swap: How the Slots Work
Combine has four slots: Red, Green, Blue and Alpha. Each slot can be empty, can take a channel of the loaded image, or can take a separate uploaded image. This is the case where a challenge hands you three grayscale files and says each is one channel of the real picture: upload them into the three slots and combine. You can also pick Inverted values for any slot, which feeds 255 minus each value.
What a slot reads from an uploaded image is fixed, not guessed. For the Red, Green or Blue slot, a grayscale or gray-plus-alpha image supplies its gray value, and an RGB, RGBA or palette image supplies its own Red channel (no averaging or brightness blend). For the Alpha slot, a grayscale image supplies its gray value, and an image with real alpha supplies that alpha; an image with no alpha channel is refused for that slot with a message saying so. One Gray source can fill the Red, Green and Blue slots together to give a neutral gray result.
The first filled slot, in the order Red, Green, Blue, Alpha, sets the output size, and every other filled slot must match it exactly. A mismatch is refused with both sizes and the slot named; nothing is resized or cropped. The size is shown before you press Combine, and Combine stays disabled until at least one slot is filled. Empty Red, Green and Blue slots become 0 and an empty Alpha slot becomes 255 (fully opaque).
The result is always an RGBA PNG, even when Alpha is empty. Swap is a shortcut on top of the same machinery: it fills the slots with the loaded image's own channels in a different order and lets you combine at once. Swapping Red and Blue turns the pixel (10, 20, 30) into (30, 20, 10).
Exports: Why There Are Two Kinds of Channel Download
A channel can be downloaded as a grayscale PNG, in which the three colour values all equal the channel value. This is the version meant for re-use: drop it back into a Combine slot and the slot reads exactly the value you exported. It always holds the values you have selected (original or inverted) and never depends on the display mode that was on screen.
The tinted preview is a separate button. It bakes the hue into the picture (Green as 0, value, 0), which is nice to look at or share, but the file no longer contains the channel as a value a Combine slot can read: an RGB image supplies its Red channel to a slot, and the Red byte of a tinted Green picture is 0. For that reason the tinted preview is labelled presentation only, and the ZIP (one PNG per channel, named like photo-red.png, with -1, -2 added if two names would collide) always contains the grayscale version.
The contact sheet puts the Original and every channel tile in one labelled strip. It is a presentation image: its tiles are scaled to fit a capped canvas (at most 8000 by 3000 pixels), and a transparent original is drawn over a checkerboard instead of being silently flattened. The pixel table gives one row per pixel (x, y and each channel at the selected values) as CSV or TXT, up to 1,000,000 pixels. JPG and WebP exports of a channel preview or of the combined image are lossy and are never meant to be re-uploaded; JPG has no transparency, so it is flattened onto white.
CMYK, HSV and HSL Views, Two-Image Compare and 16-Bit Precision
For colour images the Split tab can show CMYK, HSV or HSL instead of RGB. These are derived from the 8-bit Red, Green and Blue values with fixed formulas and scaled to 0–255 so they can be drawn, inverted, measured and exported like any channel. Key is 255 − max(R, G, B); Cyan, Magenta and Yellow are (max − channel) × 255 ÷ max, rounded (for pure black, where max is 0, C, M and Y are 0 and K is 255); Hue is its angle × 255 ÷ 360; Saturation and Value (or Lightness) are scaled to 0–255. Rounding is always half up, in whole-number arithmetic. These are analysis views: Combine still takes Red, Green, Blue and Alpha only.
Compare takes a second image of the same size and shows, per channel both images have, the absolute difference, how many pixels differ, the largest difference and the mean difference. A gray image counts as Red = Green = Blue. Amplifying makes small differences visible on screen; the numbers and the downloadable difference file always carry the real values. It is a way to see where two near-identical pictures disagree, for example an original and a re-saved copy.
For a 16-bit PNG, the full-precision switch on the Split tab changes the statistics, the inverted values (65535 − v), the grayscale downloads (single channel and ZIP, written as 16-bit PNGs) and the pixel table to use the complete samples. Combine is separate: its Output precision setting is 8-bit by default and offers 16-bit when a 16-bit source is in use, which writes a 16-bit RGBA PNG (full samples from 16-bit sources, 8-bit sources scaled by 257, inversion as 65535 − v). Everything that is drawn or converted for looking at stays 8-bit: the tiles on screen, the tinted preview, the contact sheet and the JPG/WebP previews.
Exact Samples or Browser-Decoded: How Much to Trust the Numbers
PNG and BMP files (and the first frame of a GIF) are decoded by code written for this page. For PNG that means validating every chunk checksum, undoing the scanline filters, resolving palettes and reading the samples directly, so the values equal what is stored in the file. This is called exact sample extraction. A file that is malformed is refused with a specific message naming what failed (for example a bad checksum, a truncated image-data chunk, a palette index beyond the table or an unknown critical chunk), not partially drawn.
JPEG, WebP and AVIF are handed to your browser's image decoder first. The tool asks the browser to switch off orientation handling, colour conversion and alpha premultiplication where it allows; in our test Chromium, Firefox and WebKit all still applied a JPEG's EXIF orientation. That is browser-decoded extraction: values can differ from the file because of colour management or resampling, JPEG is lossy by nature, and a banner says so, naming any option the browser would not switch off. The size of the difference depends on the browser and the file. In a test on seven real photographs (six of 356 × 356 pixels and one of 1000 × 1000) saved as JPEG at quality 95 and 75 and as WebP at quality 90, the average difference from the exact PNG was between 0.6 and 1.9 levels (out of 255) in Chromium and Firefox, and a lossless WebP matched exactly in all three browsers tested. In WebKit (the engine behind Safari) the same WebP files matched Chromium, but the JPEGs, which carried an embedded colour profile, averaged about 4 levels (1.3 to 9.3 depending on the photograph) and differed by up to 86 for a single value, because that browser applied the profile. When a JPEG or WebP embeds a colour profile the tool says so in the banner. A JPEG's EXIF orientation tag is another case: Chromium, Firefox and WebKit all applied it in our test even though the tool asks them not to, so such a JPEG is shown rotated and the banner says so. The conditions of the measurements are listed in the table below. When the result matters, work from a lossless original such as PNG.
Using It for CTF and Forensic Work
Typical jobs: checking whether one channel looks different from the others, reassembling a picture from three or four separate channel files, trying the six Red/Green/Blue orderings when a picture's colours look wrong, and isolating one channel for a mask or a colour-cast diagnosis. Look at the tiles in grayscale first, then inverted, then expand any that look different and read pixel values with the inspector.
What to watch for, and what is not evidence: a channel that is nearly flat while the others are busy, a faint outline visible in only one channel, or a swapped ordering that suddenly makes a picture natural. Smooth gradients, saturated colours and shadows make channels differ in ordinary photographs, and an alpha channel that is uniform is normal. This page does not decide that anything is hidden; it shows channels. Statistical or bit-level evidence needs the Steganography Detector or the Bit Plane Viewer, and recovering a message needs an extractor.
Which Formats Are Read, and How
Exact means the channel values are the samples stored in the file; browser-decoded means your browser decoded the image first.
| Format | Decoding | Details |
|---|---|---|
| PNG | Exact | The combinations the PNG standard allows: grayscale at 1, 2, 4, 8 or 16 bits; RGB, gray+alpha and RGBA at 8 or 16 bits; palette at 1, 2, 4 or 8 bits; with or without interlacing (any other pairing is refused as corrupt); palette and tRNS handled; Alpha for gray+alpha, RGBA and palette with tRNS |
| BMP | Exact | Uncompressed 1-, 4- and 8-bit palette, 24-bit and 32-bit; stored as Blue, Green, Red and reordered; no Alpha (32-bit fourth byte is reserved) |
| GIF | Exact, first frame only | Composited by this page's own reader; Alpha only if the first frame has transparent pixels |
| JPEG | Browser-decoded | Lossy; never an Alpha tile |
| WebP / AVIF | Browser-decoded | Alpha tile if the decoded image has non-opaque pixels or the file declares alpha |
| SVG / TIFF / PSD / RAW / HEIC | Refused | Named in the message; convert to PNG first |
| BMP with RLE, bitfields, 16-bit or OS/2 header | Refused | Only uncompressed BI_RGB is read |
What a Combine Slot Reads From an Uploaded Image
These rules are fixed so the same input always gives the same output.
| Uploaded image type | Red, Green or Blue slot | Alpha slot |
|---|---|---|
| Grayscale | Its Gray value | Its Gray value |
| Gray + Alpha | Its Gray value | Its real Alpha |
| RGB / palette without tRNS / BMP / JPEG | Its own Red channel | Refused: no alpha channel to supply |
| RGBA / palette with tRNS / WebP or AVIF with alpha / GIF with transparency | Its own Red channel | Its real Alpha |
Example: Rebuild a Picture From Three Grayscale Files
A common challenge hands you three grayscale images and says each is one channel of the real picture. Load each into its slot on the Combine tab; the output is one RGBA image.
| Slot | File | Value used |
|---|---|---|
| Red slot | red.png (grayscale, one pixel, value 200) | 200 |
| Green slot | green.png (grayscale, one pixel, value 100) | 100 |
| Blue slot | blue.png (grayscale, one pixel, value 50) | 50 |
| Alpha slot | left empty | 255 (fully opaque) |
| Combined pixel | RGBA, always | (200, 100, 50, 255) |
Examples
Input: The 3×2 RGBA sample: pixel (1,1) is R 10, G 20, B 30, A 200
Result: Red tile value 10 · Green 20 · Blue 30 · Alpha 200 at (1,1)
Meaning: Use Try a sample, open the Split tab, expand a tile and read pixel (1, 1) with the pixel inspector: each channel tile holds that channel's number for the pixel.
Input: Sample Red channel, six pixels in order
Result: 255, 0, 0, 255, 10, 255 · min 0 · max 255 · mean 129.1667
Meaning: Green is 0, 255, 0, 255, 20, 255 (mean 130.8333), Blue is 0, 0, 255, 0, 30, 255 (mean 90.0000) and Alpha is 255, 128, 0, 255, 200, 255 (mean 182.1667).
Input: Invert the sample's Red channel
Result: 0, 255, 255, 0, 245, 0 · mean 125.8333
Meaning: Each value becomes 255 − v. Inverting twice returns exactly 255, 0, 0, 255, 10, 255, because 255 − (255 − v) = v for every integer from 0 to 255.
Input: Swap Red and Blue on the sample
Result: (0,0) 255,0,0,255 becomes 0,0,255,255 · (1,1) 10,20,30,200 becomes 30,20,10,200
Meaning: Red output takes the Blue values and Blue output takes the Red values; Green and Alpha stay. Pixel (2,1) is white (255, 255, 255) so it is unchanged.
Input: The six orderings of (R, G, B) = (10, 20, 30)
Result: (10,20,30) · (10,30,20) · (20,10,30) · (20,30,10) · (30,10,20) · (30,20,10)
Meaning: Identity, swap Green and Blue, swap Red and Green, Red←Green Green←Blue Blue←Red, Red←Blue Green←Red Blue←Green, and swap Red and Blue.
Input: A 1-bit grayscale PNG with samples 1, 0, 1
Result: 255, 0, 255
Meaning: 1-bit samples are multiplied by 255 (2-bit by 85, 4-bit by 17) so every sample uses the full 0–255 range with no rounding. A 2-bit image with samples 0, 1, 2, 3 shows 0, 85, 170, 255.
Input: A palette PNG whose pixel uses colour-table entry 2, which is (0, 0, 255)
Result: Red 0 · Green 0 · Blue 255
Meaning: The index is looked up in the PLTE table; it is never used as a channel value, so the pixel is blue, not (2, 2, 2).
Input: The same palette image with tRNS alpha values 255, 128, 0 for entries 0, 1, 2
Result: An Alpha tile with 255, 128 and 0 for pixels using those entries
Meaning: In a palette PNG tRNS is a per-entry alpha table, so a real, non-binary Alpha channel appears.
Input: A 24-bit BMP pixel stored as the bytes 50, 100, 200
Result: Red 200 · Green 100 · Blue 50
Meaning: BMP stores each pixel as Blue, Green, Red, so the tool reorders them. A tool that skips this would show red and blue swapped.
Input: A 16-bit gray PNG with samples 0x1234 and 0x12FF
Result: Displayed as 18 and 18 (high byte 0x12); full values 4660 and 4863
Meaning: The two samples share a high byte but differ in the low byte. Full-precision mode keeps them apart; tRNS matching also uses the full sample, so only one of them can match a key of 0x12FF.
Input: CMYK of the sample pixel (10, 20, 30)
Result: C 170 · M 85 · Y 0 · K 225
Meaning: K = 255 − 30 = 225; each of C, M, Y is (30 − channel) × 255 ÷ 30: (20 × 255) ÷ 30 = 170, (10 × 255) ÷ 30 = 85 and 0.
Input: HSV of orange (255, 128, 0)
Result: H 21 · S 255 · V 255
Meaning: The hue is 60 × 128 ÷ 255 = 30.12°, and 30.12 × 255 ÷ 360 is 21.33, rounded to 21 (a rounded 30° would give 21.25, which also rounds to 21); saturation is (255 − 0) × 255 ÷ 255 = 255 and value is the maximum, 255.
Input: Red slot filled from a 4×2 image, Green slot from a 5×2 image
Result: Refused: the Red slot sets the output to 4 × 2, but the Green slot's source is 5 × 2
Meaning: Sources must match exactly; the message names both sizes and the slots, and nothing is cropped or resized.
How it works
1. Check the format and the size from the header
The format is recognised from the file's leading bytes, not its name. The file is refused before any decoding if it is over 25 MB, if its header reports more than 16,777,216 pixels in total (width × height, not a per-side limit), or if the format is not supported (SVG, TIFF, PSD, RAW and HEIC are named in the message). Dimensions are read from the PNG, BMP, GIF, JPEG, WebP or AVIF header with bounded walks and overflow-checked arithmetic, so a small file that claims enormous dimensions is refused cheaply.
2. Decode
PNG, BMP and the first GIF frame are decoded by the page's own code in a Web Worker: chunk checksums, filters, palettes, bit depths, tRNS and the BMP byte order are all handled there. JPEG, WebP and AVIF are decoded by the browser. After decoding, the size is checked against the header again.
3. Normalise to channels
Every image becomes whole-number channels (Gray, Gray and Alpha, RGB or RGBA). Samples below 8 bits are scaled by exact factors, 16-bit samples keep their full value next to the high byte, palettes are resolved, and the Alpha rules for the format are applied.
4. Measure and draw
Minimum, maximum and mean are computed for both the original and the inverted values. Tiles are drawn at display size from the same arrays; the picture on screen is never read back into any calculation.
5. Combine
Each slot's source is resolved by the fixed rules, the output size is set by the first filled slot, empty slots take 0 or 255, and one RGBA image is written byte by byte with no resizing.
6. Export
Channel PNGs, ZIP entries and the combined image are encoded from the channel values (not from the on-screen tiles) and downloaded from your browser; nothing is uploaded.
How the Browser-Decoded Numbers Were Measured
The drift figures quoted above come from this test; they describe these files and browsers, not every image.
| Item | Condition |
|---|---|
| Browsers | Chromium 147.0.7727.15, Firefox 148.0.2 and WebKit 26.4 as shipped with Playwright 1.59, headless |
| Machine | Apple M2 Pro, 16 GB, macOS (Darwin 25.6) |
| Images | Seven real photographs from the macOS wallpaper set (six at 356 × 356 pixels and one at 1000 × 1000), converted to PNG; the photographs are not redistributed |
| Variants | JPEG at quality 95 and 75 (macOS sips), WebP at quality 90 (cwebp -q 90) and lossless WebP (cwebp -lossless -exact), all made from the same PNG |
| Reference | The PNG decoded exactly by this page's own decoder |
| Metric | For each colour channel the mean absolute difference between the browser-decoded value and the exact value over every pixel, averaged over Red, Green and Blue; 'a single value' is the largest absolute difference of any channel value in the image |
| Not measured | Other photographs, other encoders, AVIF, phones, other operating systems |
What the results mean
| Message or label | What it means | What to do |
|---|---|---|
| Exact sample extraction | The values are read from the file's own decoded samples (PNG, BMP, GIF first frame) | Trust the numbers as the file stores them |
| Browser-decoded extraction | The browser decoded the image first (JPEG, WebP, AVIF); values may differ slightly from the file | Do not rely on exact values; look for a lossless original |
| Alpha: present — palette tRNS table | A palette PNG with per-entry alpha values | The Alpha tile shows those values per pixel |
| Transparent colour key | A grayscale or RGB PNG names one transparent colour; no Alpha tile | Counts how many pixels match the key; it is not an alpha channel |
| Reserved byte (not alpha) | The unused fourth byte of a 32-bit BMP | Inspection only; never used as transparency or in Combine |
| Size mismatch | Two filled Combine slots have different pixel sizes | Use sources of identical size; nothing is resized or cropped |
| No alpha channel to supply | An image without alpha was put in the Alpha slot | Pick an image with real alpha, or a grayscale image to use as alpha |
| Differing pixels (Compare) | How many pixels of a channel differ between the two images | 0 for every channel means the images are identical in those channels |
| Inverted values | The numbers shown are 255 − v, not the file's values | Switch back to Original to read the stored values |
Limitations
- Files over 25 MB and images with more than 16,777,216 pixels in total are refused before decoding. 4096 × 4096 is just the square that reaches that count: the limit is on width × height, so 8192 × 2048 is accepted and 4097 × 4097 is not, and there is no separate limit on width or height. These limits are the tool's own settings; very large images that are close to them can be slow on a phone.
- A JPEG with an EXIF orientation tag (5 to 8) is returned rotated by the browser, so its tiles have the width and height swapped relative to the stored file; the banner says so.
- JPEG, WebP and AVIF are decoded by the browser, so their values can differ from what the file stores (0.6 to 1.9 levels on average in Chromium and Firefox but about 4, up to 9, for a JPEG with an embedded colour profile in WebKit, in our test of seven photographs), and a given browser may not decode every AVIF variant (the message then says so). Only the browser and file combinations named on this page were measured.
- Interlaced PNG is decoded exactly by the page's own code. The source file's colour profile, gamma and any other ancillary chunk are ignored; channel values are the stored samples.
- SVG, TIFF, PSD, camera RAW and HEIC are not supported. BMP files with RLE or bitfield compression, 16-bit BMP and the 12-byte OS/2 BMP header are refused.
- Only the first frame of a GIF is used. The page reads it with its own parser; the 'restore to previous' disposal method is irrelevant for a first frame, but later frames are never shown. Pixels outside the first frame's rectangle are treated as transparent (as the three browsers tested draw them), not as the GIF's background colour.
- A WebP or AVIF file that declares alpha but is fully opaque shows an Alpha tile only if its header declares it; a file whose alpha cannot be detected from the header and has no transparent pixel shows none.
- CMYK here is the simple, device-independent formula, not an ICC colour-profile conversion; HSV and HSL are scaled to 0–255 and rounded, so different tools may disagree by one step. These views cannot be used in Combine.
- The per-pixel table is limited to 1,000,000 pixels. The contact sheet is limited to a canvas of 8000 by 3000 pixels and scales its tiles to fit, so it is not a data file.
- The tinted preview, JPG, WebP and contact-sheet downloads are presentation files: they do not preserve exact channel values and must not be re-uploaded into Combine.
- Combine does not resize, crop or align images. It cannot use CMYK, HSV or HSL channels, and Alpha can come only from a source that has alpha or is grayscale.
- This tool does not hide data, search for hidden data, show bits or draw histograms. A channel that looks odd is a lead, not evidence of anything hidden.
Privacy
Your image is processed locally in your browser and is not sent to our servers: decoding, channel maths, Combine and every export run in a Web Worker on your device, and the file name is shown as plain text. Nothing about the image is put in the page address or sent to analytics (only feature and option names such as split, combine, swap or export_zip are counted). The image and any images you add to Combine live in memory for the current page only and are released when you replace them or press Load another image; reloading the page clears everything. This tool does not send your image to another tool; the Next steps links open the other tool, where you load the file again. Your browser remembers only which tabs you pinned (in localStorage), never the image or anything derived from it. Third-party advertising or analytics scripts, if you accept them, are outside this tool's own processing.
Frequently Asked Questions
What are the color channels of an image?
A color channel is one component of every pixel taken on its own. An RGB image has a Red, a Green and a Blue channel, each a whole number from 0 to 255 per pixel, and many formats add an Alpha channel for transparency. Drawn separately, each channel is a gray picture showing how much of that colour each pixel contains.
Why does my Red channel look like a gray picture, not a red one?
Because a channel is a single number per pixel, so by default it is drawn as brightness: white where that colour is strong, black where it is absent. Switch the display to In channel color to tint the tile with its own hue. Both are drawings of the same numbers; Alpha, Gray and the CMYK, HSV and HSL channels are always shown in gray.
Can this tool combine or swap channels, not just split them?
Yes. Fill the Red, Green, Blue and optional Alpha slots from the loaded image or from separate images and combine, or use the swap shortcut, for example Red and Blue. Some other channel splitters only take an image apart and point to a separate page for swapping or merging; that is the gap this page closes in one place. The claim is about the specific pages compared, not about every tool.
Does uploading three separate channel images work?
Yes. Upload each into its slot. A grayscale image supplies its gray value; an RGB, RGBA or palette image supplies its own Red channel for a Red, Green or Blue slot; for the Alpha slot an image with real alpha supplies that alpha and an image with no alpha is refused. All filled slots must have exactly the same size, and empty slots default to 0 (Red, Green, Blue) or 255 (Alpha). The output is always an RGBA PNG.
Is my image uploaded to a server?
No. This tool processes your image entirely in your browser; the decoding and every calculation run in a Web Worker on your device and nothing is sent to a server.
Does this tool find or hide secret data in a channel?
No. It shows, inverts, swaps and recombines the channels that are already visible in an image. To hide a message in a channel's low bits or to recover one that was hidden that way, use the Color Channel Hider and Color Channel Extractor; to look at individual bits, use the Bit Plane Viewer.
What image formats are supported, and is the result always exact?
PNG and BMP are read exactly from the file's own samples, and so is the first frame of a GIF (read by this page's own code). JPEG, WebP and AVIF are decoded by your browser first, so their values can differ slightly from the file because of colour management or resampling, and JPEG is lossy; a banner says when that is the case, and the difference can be larger than a few levels when the file embeds a colour profile that the browser applies. SVG, TIFF, PSD, RAW and HEIC are not supported.
Why does my BMP have no Alpha channel option?
A 24-bit or 8-bit palette BMP has no alpha at all. A 32-bit BMP has a fourth byte per pixel, but the BMP format reserves it and does not define it as alpha, so this tool never treats it as transparency; the Show reserved byte switch lets you inspect it, labelled as not alpha.
Why does my PNG with a transparent colour show no Alpha tile?
A grayscale or RGB PNG with a tRNS chunk names one transparent colour, which is an on/off key and not an alpha channel, so there is no Alpha tile; the Load tab reports the key and how many pixels match it. A palette PNG with tRNS has a real alpha value per colour-table entry, so it does show an Alpha tile.
Can I use the downloaded channel files again in Combine?
Use the grayscale channel download (or the ZIP, which always contains the grayscale versions): it stores the exact values you selected, so it round-trips through Combine. The tinted preview, JPG, WebP and contact-sheet downloads do not preserve exact channel values and are labelled presentation only.
Related Tools
Bit Plane Viewer
Look inside the individual bits of each channel
StegSolve
The full StegSolve workflow, including a two-image combiner and brute force
Color Channel Extractor
Recover a message deliberately hidden in a colour channel
Color Channel Hider
Hide a message in channel bits and test it here
Hex Viewer
See the raw bytes of the file
Strings Analyzer
Extract readable strings from the file
CTF Lab
All forensics, encoding and steganography tools