The profile class in the header decides which tags a profile must contain (ICC.1:2022 clause 8). A profile may hold any other tag as well, unless its class rules it out. The required tags are enough for a basic CMM to convert colours without any private data.
Tags every profile needs
Every profile except a DeviceLink has:
descprofileDescriptionTag,cprtcopyrightTag,wtptmediaWhitePointTag,chadchromaticAdaptationTag when the measurements were made under a white other than the PCS’s D50.
A profile whose colorimetric intents do not produce picture-referred colorimetry should also
have the ciis tag. Any profile may use
the same data for every intent, and the media-relative colorimetric tag for ICC-absolute
colorimetric too.
Input profiles (scnr)
For scanners and cameras, in one of three forms:
- N-component LUT-based:
A2B0. It may addA2B1,A2B2,B2A0toB2A2, theD2BandB2Dtags, andgamt. - Three-component matrix-based:
rXYZ,gXYZ,bXYZ,rTRC,gTRCandbTRC; the PCS must be PCSXYZ. The AToB and BToA tags andgamtmay be added. - Monochrome:
kTRC, optionally with AToB and BToA tags.
Display profiles (mntr)
- N-component LUT-based:
A2B0andB2A0, optionally the other intents, theD2BandB2Dtags andgamt. - Three-component matrix-based: the three matrix columns and three tone
curves, PCSXYZ only, optionally AToB, BToA and
gamt. - Monochrome:
kTRC.
Output profiles (prtr)
- N-component LUT-based:
A2B0,A2B1,A2B2,B2A0,B2A1,B2A2andgamt, andclrtwhen the data colour space is anxCLRspace. TheD2BandB2Dtags may be added. - Monochrome:
kTRC, optionally with AToB and BToA tags.
DeviceLink profiles (link)
A conversion from one device straight to another, made by combining profiles. It cannot be
undone, does not describe a device and cannot be embedded in an image. It needs
desc, cprt, pseq and A2B0; clrt
when the data colour space is xCLR, and clot when the PCS field is.
It may have a D2B0. Its single A2B0 holds whichever intent the
header’s rendering intent field names. The data colour space is that of the first profile
in the sequence, and the PCS field that of the last.
ColorSpace profiles (spac)
Conversions between a colour encoding and the PCS, made from a model rather than
measurements; they may be embedded in images. They need B2A0 and
A2B0, and may have the other intents, the D2B and B2D
tags and gamt. Header fields about devices are zero.
Abstract profiles (abst)
An effect applied in the PCS, from PCS to PCS, such as a sepia tone. It needs
A2B0 and may have D2B0; it cannot be embedded in an image.
NamedColor profiles (nmcl)
A list of named colours, such as a set of spot inks, each with a PCS value and optionally
device values. It needs ncl2. A device may have named colour profiles beside
its ordinary ones, one for each set of named colours.
Required tags in version 2
ICC.1:2001-04 (clause 6.3) lists the required tags of version 2 profiles. Every class but DeviceLink
needs desc (a textDescriptionType), wtpt and cprt (a textType),
and then:
| Profile | Also required |
|---|---|
| Monochrome input, display or output | kTRC |
| Three-component matrix-based input | rXYZ, gXYZ, bXYZ (the red, green and blue colorant tags), rTRC, gTRC, bTRC |
| N-component LUT-based input | A2B0 |
| RGB display | The three colorant tags and the three tone curves; version 2 defines no LUT-only display profile |
| Colour output | A2B0, A2B1, A2B2, B2A0, B2A1, B2A2, gamt |
| DeviceLink | desc, A2B0, pseq, cprt (no wtpt) |
| ColorSpace conversion | B2A0, A2B0 |
| Abstract | A2B0 |
| Named colour | ncl2 (the older ncol is obsolete) |
Version 2 transforms are lut8Type or lut16Type, tone curves are curveType, and the intents and
models are as in the tables below. Only PCSXYZ can be used with the matrix model; an
A2B0 is needed for PCSLAB. The explorer checks version 2 profiles against these
tables and version 4 profiles against those above.
Which tag holds which intent
| Class | A2B0 | A2B1 | A2B2 | TRC and matrix, kTRC | B2A0 | B2A1 | B2A2 |
|---|---|---|---|---|---|---|---|
| Input, display | Device to PCS, perceptual | Colorimetric | Saturation | Colorimetric | PCS to device, perceptual | Colorimetric | Saturation |
| Output | Device to PCS, perceptual | Colorimetric | Saturation | Undefined | PCS to device, perceptual | Colorimetric | Saturation |
| ColorSpace | Encoding to PCS, perceptual | Colorimetric | Saturation | Undefined | PCS to encoding, perceptual | Colorimetric | Saturation |
| Abstract | PCS to PCS | Undefined | |||||
| DeviceLink | Device 1 to device 2, intent from the header | Undefined | |||||
| NamedColor | Undefined | ||||||
“Colorimetric” covers both the media-relative and the ICC-absolute colorimetric intents.
“Undefined” means the ICC does not say how the tag is used there and recommends leaving it
out. D2B0 to D2B2 and B2D0 to B2D2
follow the same pattern for floating-point data, and D2B3 and B2D3
hold ICC-absolute colorimetric directly.
Which tag a CMM uses
When a profile holds more than one way to convert, a CMM chooses in this order for input, display, output and colour space profiles, for the intent asked for:
- The
D2BxorB2Dxtag for that intent, if present and every processing element in it is supported. - Otherwise the
A2BxorB2Axtag for that intent. - Otherwise
A2B0orB2A0. - Otherwise the tone curves and matrix columns, or
kTRC.
For DeviceLink and abstract profiles: D2B0 if present and supported,
otherwise A2B0.
Required tags in iccMAX
iccMAX profiles (version 5) follow ICC.2:2023 clause 8 instead. Every class but ColorEncodingSpace,
DeviceLink, MultiplexIdentification and MultiplexLink needs desc and cprt,
wtpt when the PCS field is non-zero, and swpt when the spectral PCS field is
non-zero. Then:
| Class | Also required |
|---|---|
Input (scnr) | One or more of A2B0 to A2B3 and D2B0 to D2B3; with a non-zero MCS field also A2M0 and mcta |
Display, output, colour space (mntr, prtr, spac) | One or more of the AToB and DToB tags, and one or more of B2A0 to B2A3 and B2D0 to B2D3 |
DeviceLink (link) | desc, cprt, and A2B0 or D2B0; psin may be added |
ColorEncodingSpace (cenc) | rfnm only; with the reference name “ISO 22028-1” the cept structure must give every parameter and csnm the name, otherwise cept holds overrides |
Abstract (abst) | A2B0 or D2B0 |
NamedColor (nmcl) | nmcl (the namedColorTag, an array of structures) |
MultiplexIdentification (mid ) | A2M0 and mcta |
MultiplexLink (mlnk) | M2A0 and mcta; mdv may be added |
MultiplexVisualization (mvis) | One or more of M2B0 to M2B3 and M2S0 to M2S3, and mcta |
A colorantInfoTag (clin) is recommended for xCLR and ncXXXX spaces,
in place of ICC.1’s colorantTableTag. The explorer checks version 5 profiles against these rules.
The intents (ICC.2 Table 25) are as in ICC.1 with a fourth: AToB0 perceptual, AToB1 media-relative colorimetric, AToB2 saturation and AToB3 ICC-absolute colorimetric for input, display, output and colour space profiles (and the BToA, DToB and BToD tags likewise); an abstract profile’s AToB0 is PCS to PCS and a DeviceLink’s is device to device, the others undefined.
Which tag an iccMAX CMM uses
For input, display, output and colour space profiles and a colorimetric PCS: the AToB or BToA tag of
the intent asked for; otherwise intent 0; otherwise intent 1; otherwise intent 3. With a spectral PCS,
the DToB and BToD tags in the same order. With an MCS connection, A2M0. When converting an
extended-range (HDR) PCS to a standard one, the H2S tag of the intent, then 0, 1 and 3.
Abstract profiles use A2B0 (colorimetric PCS) or D2B0 (spectral PCS); a
DeviceLink uses A2B0; MultiplexIdentification A2M0; MultiplexLink
M2A0; MultiplexVisualization the M2B or M2S tags of the intent,
then 0, 1 and 3. The BRDF (bAB, bBA, bDB, bBD,
bcp, bsp, bMB, bMS) and directional (dAB,
dBA, dDB, dBD) tags follow the same order when they are wanted.
The simple models
Monochrome: the grey value goes through kTRC to give the
achromatic value of the PCS, from 0 for black to 1 for white, and the PCS value is the PCS
white point’s PCSXYZ or PCSLAB value multiplied by it. The curve is usually made from the
PCS’s luminance channel, Y or L*. The way back uses the inverse curve.
Three-component matrix: each channel goes through its tone curve to give a
linear value, and the linear values are multiplied by the matrix whose columns are
rXYZ, gXYZ and bXYZ:
X = rX·R + gX·G + bX·B
Y = rY·R + gY·G + bY·B
Z = rZ·R + gZ·G + bZ·B
where R, G and B are the outputs of rTRC, gTRC and
bTRC. The way back, from PCSXYZ to the device, uses the inverse matrix, clips
the linear values to 0 to 1, and applies the inverse curves. A curve that is not monotonic
has no defined inverse. The same model can be written as a lutAToBType with the tone curves
as “M” curves and the matrix scaled by 32768/65535, the PCSXYZ encoding factor.