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.