Apple Icon Image format
The Apple Icon Image format is an icon format used in Apple Inc.'s macOS. It supports icons of 16 × 16, 32 × 32, 48 × 48, 128 × 128, 256 × 256, 512 × 512 points at 1x and 2x scale, with both 1- and 8-bit alpha channels and multiple image states (example: open and closed folders). The fixed-size icons can be scaled by the operating system and displayed at any intermediate size.
![]() | |
| Filename extension |
.icns |
|---|---|
| Type code | icns |
| Uniform Type Identifier (UTI) | com.apple.icns |
| Developed by | Apple Inc. |
| Type of format | icon file format |
As of macOS 11, PDF and PNG have become the preferred file formats for macOS custom icons instead.
File structure
The file format consists of an 8 byte header, followed by any number of icons.
Header
| Offset | Size | Purpose |
|---|---|---|
| 0 | 4 | Magic literal, must be "icns" (0x69, 0x63, 0x6e, 0x73) |
| 4 | 4 | Length of file, in bytes, msb first |
Icon data
| Offset | Size | Purpose |
|---|---|---|
| 0 | 4 | Icon type, see OSType below. |
| 4 | 4 | Length of data, in bytes (including type and length), msb first |
| 8 | Variable | Icon data |
Compression
| lead value |
tail bytes |
result uncompressed |
|---|---|---|
| 0…127 | 1…128 | 1…128 bytes |
| 128…255 | 1 byte | 3…130 copies |
Over time the format has been improved and there is support for compression of some parts of the pixel data. The 32-bit ("is32", "il32", "ih32","it32") and ARGB ("ic04", "ic05") pixel data are often compressed (per channel) with a format similar to PackBits.[1] Some sources mentioned that the OS supports both compressed or uncompressed data chunks.
The following pseudocode decompresses the data:
While there's compressed data:
Read one byte as an unsigned number N
If N < 0x80:
Output the next (N + 1) bytes
Else:
Output the next byte (N - 0x80 + 3) times
Example: 02 01 02 02 80 03 81 04 82 05 should decompress to 01 02 02 03 03 03 04 04 04 04 05 05 05 05 05
Icon types
| OSType | Length (bytes) | Size (pixels) | Supported OS Version | Description |
|---|---|---|---|---|
| ICON | 128 | 32 | 1.0 | 32×32 1-bit mono icon |
| ICN# | 256 | 32 | 6.0 | 32×32 1-bit mono icon with 1-bit mask |
| icm# | 48 | 16 | 6.0 | 16×12 1 bit mono icon with 1-bit mask |
| icm4 | 96 | 16 | 7.0 | 16×12 4 bit icon |
| icm8 | 192 | 16 | 7.0 | 16×12 8 bit icon |
| ics# | 64 (32 img + 32 mask) | 16 | 6.0 | 16×16 1-bit mask |
| ics4 | 128 | 16 | 7.0 | 16×16 4-bit icon |
| ics8 | 256 | 16 | 7.0 | 16x16 8 bit icon |
| is32 | varies (768) | 16 | 8.5 | 16×16 24-bit icon |
| s8mk | 256 | 16 | 8.5 | 16x16 8-bit mask |
| icl4 | 512 | 32 | 7.0 | 32×32 4-bit icon |
| icl8 | 1,024 | 32 | 7.0 | 32×32 8-bit icon |
| il32 | varies (3,072) | 32 | 8.5 | 32x32 24-bit icon |
| l8mk | 1,024 | 32 | 8.5 | 32×32 8-bit mask |
| ich# | 288 | 48 | 8.5 | 48×48 1-bit mask |
| ich4 | 1,152 | 48 | 8.5 | 48×48 4-bit icon |
| ich8 | 2,304 | 48 | 8.5 | 48×48 8-bit icon |
| ih32 | varies (6,912) | 48 | 8.5 | 48×48 24-bit icon |
| h8mk | 2,304 | 48 | 8.5 | 48×48 8-bit mask |
| it32 | varies (49,152) | 128 | 10.0 | 128×128 24-bit icon |
| t8mk | 16,384 | 128 | 10.0 | 128×128 8-bit mask |
| icp4 | varies | 16 | 10.7 | 16x16 icon in JPEG 2000 or PNG format |
| icp5 | varies | 32 | 10.7 | 32x32 icon in JPEG 2000 or PNG format |
| icp6 | varies | 64 | 10.7 | 64x64 icon in JPEG 2000 or PNG format |
| ic07 | varies | 128 | 10.7 | 128x128 icon in JPEG 2000 or PNG format |
| ic08 | varies | 256 | 10.5 | 256×256 icon in JPEG 2000 or PNG format |
| ic09 | varies | 512 | 10.5 | 512×512 icon in JPEG 2000 or PNG format |
| ic10 | varies | 1024 | 10.7 | 1024×1024 in 10.7 (or 512x512@2x "retina" in 10.8) icon in JPEG 2000 or PNG format |
| ic11 | varies | 32 | 10.8 | 16x16@2x "retina" icon in JPEG 2000 or PNG format |
| ic12 | varies | 64 | 10.8 | 32x32@2x "retina" icon in JPEG 2000 or PNG format |
| ic13 | varies | 256 | 10.8 | 128x128@2x "retina" icon in JPEG 2000 or PNG format |
| ic14 | varies | 512 | 10.8 | 256x256@2x "retina" icon in JPEG 2000 or PNG format |
| ic04 | varies | 16 | 16x16 ARGB | |
| ic05 | varies | 32 | 32x32 ARGB | |
| icsB | varies | 36 | 36x36 | |
| icsb | varies | 18 | 18x18 |
- the values inside the brackets () in the length column is the uncompressed length.
- the ARGB format consists of the ascii values for 'ARGB' and the four compressed channels tightly packed
Other types
| OSType | Length (bytes) | Description |
|---|---|---|
| 'TOC ' | varies | "Table of Contents" a list of all image types in the file, and their sizes (added in Mac OS X 10.7) |
| 'icnV' | 4 | 4-byte big endian float - equal to the bundle version number of Icon Composer.app that created to icon |
| 'name' | Unknown | |
| 'info' | 259 | Info binary plist. Usage unknown |
Support
Various image viewers can load *.icns files, and free and open source converters from or to PNG also exist.[2][3] GTK+ can load *.icns resources since 2007.[4] Other tools supporting the format include the Apple Icon Composer and icns Browser, The Iconfactory, and IconBuilder.
MacOS offers the built-in iconutil command line tool to pack and unpack *.icns files.
External links
- IconFamily – Open source Objective C class to read and write Apple icns files
- osxiconutils - Command line tools to work with Apple icns files
See also
- ICO format on Windows
- X PixMap format for X11
References
- Macintosh Icons
- "libicns". SourceForge project icns. 2009. Retrieved August 18, 2016.
- "png2icns". Moin Uddin. 2016. Retrieved May 25, 2017.
- Lyonel Vincent (2007). "Mac OS X icons for GTK+". Retrieved August 18, 2016.
