Introduction
An ICC profile describes the colours of a device or a colour space so that colour management software can convert between them: a camera’s or scanner’s RGB, a display’s RGB, a printer’s CMYK, or a standard space such as sRGB or Adobe RGB. The format is defined by the International Color Consortium (ICC), founded in 1993, and published as ICC.1, which is also the international standard ISO 15076-1.
A profile relates the device’s values to a device-independent profile connection
space (PCS), CIE XYZ or CIELAB under the D50 illuminant. Converting from one device to
another goes through the PCS: the first profile maps the source values into it, and the
second maps them out to the destination. Profiles are stored as files, usually with the
extension .icc (and .icm on Windows), and are also embedded in
images and documents so that their colours can be shown as intended.
There are two versions in use. Version 2 profiles were defined up to ICC.1:2001-04 and are still the most common; version 4, first published as ICC.1:2001-12 and now ICC.1:2022 (profile version 4.4), clarified the PCS and added new tag types. iccMAX (ICC.2, profile version 5) extends the format with spectral and other connection spaces. The Versions and iccMAX page lists the differences.
Structure
A profile is a 128-byte header, a
tag table, and the tags’ data. Every number is
big-endian. The header gives the profile’s size, its version, its class (input, display,
output, device link, colour space, abstract or named colour), the data colour space and
the PCS, and the signature acsp at byte 36. The tag table is a count and one
12-byte entry per tag: a four-character signature, an offset and a size.
Each tag’s data starts with a four-character type signature that says how it is laid out, so a reader can show a tag it does not know the meaning of. The tags hold the description and copyright, the media white point, tone curves and matrix columns for simple RGB and grey profiles, and lookup-table transforms for the rest. Which tags a profile must have depends on its class. Several tags may share one block of data.
0Header size, CMM, version, class, colour space, PCS, date,acsp, platform, flags, device, intent, illuminant, creator, profile ID128 bytes128Tag count the number of tags, n4 bytes132Tag table signature, offset and size of each tag12 × n bytes…Tag data each tag’s type signature, 4 reserved bytes and its values, padded to 4 bytesvaries
Embedded profiles
Most profiles people meet are inside other files rather than on their own. The same bytes are stored whole, or in pieces, in these places:
- PNG: the
iCCPchunk, compressed with zlib. - JPEG: APP2 segments marked
ICC_PROFILE, split into numbered pieces when it does not fit one segment. - TIFF: tag 34675 (InterColorProfile), an
UNDEFINEDarray. - BMP: a version 5 bitmap header with
the colour space type
MBEDpoints to the profile after the pixels. - PDF: an
ICCBasedcolour space stream, and output intents.
Bit 0 of the profile flags says whether a profile is embedded. The explorer opens a profile found in a PNG, JPEG or BMP file as a file of its own.
Links
Software
- ColorSync Utility – Apple’s tool that lists, checks and inspects profiles (macOS)
- DisplayCAL – display calibration and profiling that makes and checks ICC profiles (Windows, macOS, Linux)
- ArgyllCMS – command-line colour management tools that make, dump and check profiles (Windows, macOS, Linux)
- Adobe Photoshop – Adobe’s image editor, which assigns, converts to and embeds profiles (Windows, macOS)
- GIMP – free image editor with colour management through ICC profiles (Windows, macOS, Linux)
Developers
- Little CMS – small colour management engine that reads, writes and applies ICC profiles (C)
- DemoIccMAX – the ICC’s reference implementation of ICC.1 and iccMAX profiles (C++)
- Pillow ImageCms – profile reading and colour conversion through Little CMS (Python)
Reference
- ICC.1:2022 – the specification of version 4.4 profiles
- ICC.1:2001-04 – the last specification of version 2 profiles
- ICC.2:2023 – iccMAX, the extended format of version 5 profiles