Alpha channel 2026-11-05
An alpha channel stores an additional value for each pixel that controls its contribution when images are combined by alpha compositing. In a common normalized convention, makes the source pixel fully transparent and makes it fully opaque. An alpha channel can describe partial coverage as well as transparency; its meaning includes the compositing rule, rather than merely a fourth color component. PNG represents its explicit alpha channel with 8-bit or 16-bit values, with zero fully transparent and the maximum value fully opaque.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §6.2, Alpha representation
For source color and an opaque background color , the source-over rule in Linear-light RGB isFor an original example, a red source at over a blue background produces . These are linear color components; applying the same arithmetic directly to nonlinear display codes generally gives a different physical mixture.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §13.16, Alpha channel processing; compositing and gamma correction
Storage conventions matter too. With straight alpha the stored color remains ; with premultiplied alpha it is . The red source in the example is therefore stored as either or . Using the first formula on an already premultiplied color would multiply its source contribution by alpha twice. PNG explicitly uses non-premultiplied color samples.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §6.2, unassociated alpha
Alpha compositing 2026-11-05
Alpha compositing combines image contributions using their colour values and alpha channels. The source-over compositing rule places a source layer over a destination while retaining the destination's contribution where the source is partly transparent. Other compositing rules select different contributions; the alpha values alone do not identify the chosen rule.[ref]
Compositing and Blending Level 1 by World Wide Web Consortium. 2024Candidate Recommendation Draft, §5.1 and §9.1.4, Source Over
Write for source and background colour triples, with alpha values . In premultiplied alpha form, and . Then source-over compositing givesWhen , the corresponding straight alpha colour is . The output can remain partly transparent, ready to be combined with another background.
For an original Linear-light RGB example, place red with over blue with . The result isReversing the layers instead gives and , with the same output alpha. Layer order changes the colour even when it leaves the output alpha unchanged.
If the background is opaque, and , so the rule reduces to . For a physical light-mixture interpretation, carry out that arithmetic in Linear-light RGB; encoded sRGB values first need their appropriate conversion.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §13.16, alpha channel processing and gamma correction
Separately specify whether stored colour samples already contain their alpha multiplier, so that the source contribution is not multiplied twice. Chris Lilley Created 2026-10-13 Updated 2026-11-05
Chris Lilley is credited as an editor and author of the PNG specification and as an editor of CSS Color. These works connect raster image interchange with explicit color space definitions, including the difference between encoded RGB values and components in Linear-light RGB.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. front matter, Editors and Authors
[ref] Color component 2026-11-05
A color component is one numerical coordinate used by a color model to describe a colour. An RGB representation has red, green and blue components, while YCbCr has luma and two colour-difference components. Their meanings depend on the model and encoding: a component need not represent a separately emitted primary light. The Microsoft technical guide explicitly separates RGB signals from Y, Cb and Cr and gives their conversion equations.[ref]
Recommended 8-Bit YUV Formats for Video Rendering by Gary Sullivan and Stephen Estrop. Introduction; Color Space and Chroma Sampling Rate Conversions
For an original normalized Linear-light RGB example, the triple contains three component values for one colour sample. Its blue component is ; that scalar alone does not specify the complete colour. A second triple shares that blue component while differing in red and green. Likewise, the same numerical triple interpreted in different color spaces need not describe the same physical colour.
A component is also distinct from a storage plane. An eight-bit packed pixel format can place three RGB component codes in three successive bytes for each pixel, all in one image memory plane. NV12M instead uses a luma plane and an interleaved colour-difference plane: two memory planes carry three color components. Chroma subsampling can additionally give the components different spatial sample counts.
An alpha channel describes transparency or coverage rather than another coordinate of the colour itself. PNG consequently distinguishes truecolour samples with red, green and blue components from truecolour-with-alpha samples that carry an additional alpha value.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §4.5, PNG image types; §11.2.1, IHDR colour-type/sample table
Component identity, sample location, numerical encoding and storage layout together determine how an image is interpreted. Linear-light RGB 2026-11-05
In Linear-light RGB, each component is proportional to the amount of its corresponding primary light. Adding or averaging components therefore corresponds to adding or averaging those light contributions, provided the same primaries and reference conditions are used. Nonlinear display encodings such as sRGB must first be decoded for this arithmetic.[ref]
For a nonnegative sRGB channel in , the linear value is when , and otherwise. Thus encoded mid-gray represents approximately0.214 linear light. Averaging encoded black and white gives0.5, while averaging their light gives0.5 linear, encoded as approximately0.735. This explains dark fringes produced by averaging nonlinear channel values directly. The primaries, white point and transfer rule together determine a color space; linearity alone does not specify which colors an RGB triple represents.
Premultiplied alpha 2026-11-05
With premultiplied alpha, a stored colour triple already includes its alpha channel multiplier: , where is the corresponding straight alpha colour. The alpha value itself is retained. This is also called associated alpha. For , recover ; at zero alpha the multiplication loses the original colour. PNG uses unassociated samples rather than this convention.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §6.2, Alpha representation; §12.3, conversion from associated data
For an original Linear-light RGB example, red with becomes the stored quadruple . The source-over compositing contribution of this sample is already . Multiplying its first three entries by alpha again would make the red contribution instead of .
Premultiplied alpha also makes a useful linear interpolation example transparent. Let sample A be opaque red, , and sample B be fully transparent blue, . Their premultiplied quadruples are and . Averaging them givesPlaced over black, this contributes . Averaging the straight colour triples and alphas separately would instead give , , contributing over black. That blue contribution came from colour attached to a fully transparent sample. The calculation explains how an interpolation convention can create a coloured fringe.
The multiplication convention and the color space are separate choices. The example uses Linear-light RGB throughout. A file decoder, texture sampler and alpha compositing stage must agree on both the colour encoding and whether the samples use straight alpha or premultiplied alpha.
Source-over compositing 2026-11-05
Source-over compositing combines a source layer with a background by retaining the source contribution and the fraction of the background left by the source's alpha channel. For premultiplied alpha colour triples and , the rule isThe W3C compositing specification states this operator explicitly.[ref]
Compositing and Blending Level 1 by World Wide Web Consortium. 2024Candidate Recommendation Draft, §9.1.4, Source Over; §5.1, premultiplied output and output alpha
The output is another colour-and-alpha pair, so it can be combined with another layer.For an original Linear-light RGB example, take red layer A with alpha , green layer B with alpha , and blue layer C with alpha . Place A over B over C. Expanding source-over compositing giveswith . Its straight alpha colour is therefore . The colour triple alone does not describe the partly transparent output; the alpha must accompany it.
The expansion also proves associativity in exact arithmetic: grouping A over B first or grouping B over C first produces those same three terms. Reordering the layers changes the coefficients, so associativity does not permit exchanging front and back. Intermediate rounding can introduce small numerical differences even when the mathematical grouping is equivalent.
For fully transparent source alpha zero, source-over compositing retains the background; for opaque source alpha one, it retains only the source. To interpret the colour arithmetic as a mixture of light contributions, use a common Linear-light RGB space. Stored sRGB codes generally need decoding first.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §13.16, alpha channel processing and gamma correction
Apply the equation for the actual storage convention: treating premultiplied alpha samples as straight alpha samples multiplies the source contribution twice. Straight alpha 2026-11-05
With straight alpha, colour samples are stored independently of their alpha channel value. The same convention is called unassociated alpha. For a normalized colour triple and alpha , the stored pair is ; premultiplied alpha instead stores . The PNG specification requires the unassociated convention.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §6.2, Alpha representation
For an original Linear-light RGB colour and alpha , the straight-alpha quadruple is . The corresponding premultiplied quadruple is . Both describe the same source contribution when interpreted correctly. Raising alpha to can leave the straight colour triple unchanged, while its premultiplied counterpart must become .
For source-over compositing against an opaque black background, the first sample contributes . The stored straight colour is therefore not already its final contribution. At zero alpha, a straight-alpha representation can retain arbitrary colour components while the source contributes no colour to this operation. Multiplying by zero discards those components.
Unpremultiplication recovers the straight colour by dividing premultiplied colour by alpha when alpha is nonzero. It cannot recover a colour erased at zero alpha, and finite-precision errors become significant near zero. If a premultiplied component has absolute rounding error at most , exact division by a fixed alpha magnifies that bound to . At , a component error can therefore become . These are original error bounds, rather than a measured decoder defect.
The alpha convention and the color space remain separate specifications. For light-linear arithmetic, decode nonlinear colour samples before forming their light contributions. PNG documents both compositing and conversion from associated data, including handling zero alpha.[ref]
Portable Network Graphics (PNG) Specification (Third Edition) by Mark Adler and others. §12.3, conversion from associated data; §13.16, alpha channel processing
Unpremultiplication 2026-11-05
Unpremultiplication converts premultiplied alpha colour samples back to straight alpha by dividing out a nonzero alpha channel. If is the stored premultiplied colour triple, thenThe alpha value is retained. PNG's encoder guidance specifies this division when converting associated input samples to its unassociated representation, followed by scaling to the output sample range and rounding.[ref]
For an original exact-arithmetic example in Linear-light RGB, let and . The recovered colour is . Multiplying that triple by the retained alpha restores . Dividing the alpha itself would instead destroy the transparency information.
At , all exact premultiplied colour triples arising from finite equal zero. The original colour cannot be recovered from that result: many inputs mapped to the same stored value. PNG's conversion guidance chooses black for this case; that is a defined output convention, not recovered hidden colour.[ref]
Finite precision adds another limitation. Suppose , , and the premultiplied channels are rounded to eight-bit normalized codes. Their integer codes become , while the alpha code is one. Unpremultiplication then yields normalized straight colour , far from the original triple. For fixed exact alpha, a stored component error becomes after division. Near-zero alpha can therefore magnify rounding error even when the conversion formula is correct.