Формат изображения значка Apple
![]() | |
Расширение имени файла |
.icns |
---|---|
Тип интернет-СМИ | изображение/x-icns |
Введите код | иконки |
Единый идентификатор типа (UTI) | com.apple.icns |
Магическое число | 69 63 6e 73 |
Разработано | Apple Инк. |
Тип формата | значка Формат файла |
Формат изображения значка Apple (.icns) — это формат значков используемый в Apple Inc. компании macOS , Он поддерживает значки размером 16 × 16, 32 × 32, 48 × 48, 128 × 128, 256 × 256, 512 × 512 точек в масштабе 1x и 2x, с 1- и 8-битными альфа-каналами и несколькими состояниями изображения (пример : открытые и закрытые папки). Значки фиксированного размера могут масштабироваться операционной системой и отображаться в любом промежуточном размере.
Начиная с macOS 11 , каталоги ресурсов являются предпочтительным форматом файлов для пользовательских значков macOS. [ 1 ]
Структура файла
[ редактировать ]Формат файла состоит из 8-байтового заголовка, за которым следует любое количество значков.
Заголовок
[ редактировать ]Компенсировать | Размер | Цель |
---|---|---|
0 | 4 | Магический литерал, должен быть «icns» (0x69, 0x63, 0x6e, 0x73). |
4 | 4 | Длина файла в байтах, сначала старший бит |
Данные значка
[ редактировать ]Компенсировать | Размер | Цель |
---|---|---|
0 | 4 | Тип значка, см. OSType ниже. |
4 | 4 | Длина данных в байтах (включая тип и длину), сначала старший бит |
8 | Переменная | Данные значка |
Типы значков
[ редактировать ]Тип ОС | Длина (байты) | Размер (пикселей) | Поддерживаемая версия ОС | Описание |
---|---|---|---|---|
ИКОНА | 128 | 32×32 | 1.0 | 1-битный моно значок |
ICN# | 256 | 32×32 | 6.0 | 1-битный монохромный значок с 1-битной маской |
ICM# | 48 | 16×12 | 6.0 | 1-битный монохромный значок с 1-битной маской |
ICM4 | 96 | 16×12 | 7.0 | 4-битный значок |
ICM8 | 192 | 16×12 | 7.0 | 8-битный значок |
ICS# | 64 | 16×16 | 6.0 | 1-битный монохромный значок с 1-битной маской |
ics4 | 128 | 16×16 | 7.0 | 4-битный значок |
ics8 | 256 | 16×16 | 7.0 | 8-битный значок |
is32 | варьируется 1 (768) | 16×16 | 8.5 | 24-битный значок RGB |
с8мк | 256 | 16×16 | 8.5 | 8-битная маска |
icl4 | 512 | 32×32 | 7.0 | 4-битный значок |
icl8 | 1024 | 32×32 | 7.0 | 8-битный значок |
ил32 | варьируется 1 (3072) | 32×32 | 8.5 | 24-битный значок RGB |
l8mk | 1024 | 32×32 | 8.5 | 8-битная маска |
Я# | 576 | 48×48 | 8.5 | 1-битный монохромный значок с 1-битной маской |
ich4 | 1152 | 48×48 | 8.5 | 4-битный значок |
i8 | 2304 | 48×48 | 8.5 | 8-битный значок |
их32 | варьируется 1 (6912) | 48×48 | 8.5 | 24-битный значок RGB |
h8mk | 2304 | 48×48 | 8.5 | 8-битная маска |
это32 | варьируется 1 (49152 + 4) 2 | 128×128 | 10.0 | 24-битный значок RGB |
т8мк | 16384 | 128×128 | 10.0 | 8-битная маска |
ICP4 | варьируется | 16x16 | 10.7 | JPEG 2000 † или PNG † формат или 24-битный значок RGB [ 2 ] |
ICP5 | варьируется | 32x32 | 10.7 | JPEG 2000 † или PNG † формат или 24-битный значок RGB [ 2 ] |
ICP6 | варьируется | 48x48 | 10.7 | JPEG 2000 † или PNG † формат |
ic07 | варьируется | 128x128 | 10.7 | JPEG 2000 или PNG. Формат |
ic08 | варьируется | 256x256 | 10.5 | JPEG 2000 или PNG. Формат |
ic09 | варьируется | 512x512 | 10.5 | JPEG 2000 или PNG. Формат |
ic10 | варьируется | 1024x1024 | 10.7 | Формат JPEG 2000 или PNG (512x512@2x «retina» в версии 10.8) |
ic11 | варьируется | 32x32 | 10.8 | Формат JPEG 2000 или PNG (16x16@2x «сетчатка») |
ic12 | варьируется | 64х64 | 10.8 | Формат JPEG 2000 или PNG (32x32@2x «сетчатка») |
ic13 | варьируется | 256x256 | 10.8 | Формат JPEG 2000 или PNG (128x128@2x «сетчатка») |
ic14 | варьируется | 512x512 | 10.8 | Формат JPEG 2000 или PNG (256x256@2x «сетчатка») |
ic04 | варьируется 1 (1024) | 16x16 | ARGB или JPEG 2000. † или PNG † формат | |
ic05 | варьируется 1 (4096) | 32x32 | ARGB или JPEG 2000. † или PNG † формат (16x16@2x «сетчатка») | |
МКСБ | варьируется 1 (1296) | 18х18 | ARGB или JPEG 2000. † или PNG † формат | |
ICSB | варьируется | 36x36 | Формат JPEG 2000 или PNG (18x18@2x «сетчатка») | |
сб24 | варьируется | 24х24 | JPEG 2000 или PNG. Формат | |
СБ24 | варьируется | 48x48 | Формат JPEG 2000 или PNG (24x24@2x «сетчатка») |
- 1. Значение в скобках — это несжатая длина значков ARGB и 24-битного RGB.
- 2. Данные it32 всегда начинаются с заголовка из четырех нулевых байтов (проверялись все файлы icns в macOS 10.15.7 и macOS 11). Использование неизвестно, четыре нулевых байта могут иметь любое значение и игнорируются.
- †. Эти форматы поддерживаются в отдельных файлах icns, но не отображаются должным образом, если они используются в качестве значка приложения внутри файла. пакет .app .
Формат данных изображения
[ редактировать ]- Моно-значки с альфа-маской могут отображать три цвета: белый, черный и прозрачный.
- 4-битные и 8-битные значки используют фиксированную цветовую палитру из 16 и 256 цветов соответственно.
- 24-битный формат RGB состоит из трех плотно упакованных сжатых каналов (см. Сжатие ). Значок it32 должен начинаться с четырехбайтового заголовка, см. сноску выше.
- Формат ARGB состоит из значений ascii для «ARGB» и четырех плотно упакованных сжатых каналов (см. «Сжатие »).
Совместимость
[ редактировать ]- поля ARGB также принимают файлы в формате PNG, но не наоборот: вы не можете поместить изображения ARGB ни в одно из полей только для PNG (проверено на macOS 11).
- Изображения ARGB поддерживаются только в macOS 11 и более поздних версиях — macOS 10.15.7 не отображает изображения ARGB. Тем не менее, даже клавиши ARGB могут отображаться в macOS 10.15, если вы установите изображение JPEG 2000 или PNG (см. сноску об использовании в пакетах приложений выше).
- Значки 24-битного RGB ( is32 , ил32 , их32 , it32 ) также позволяет использовать изображения в форматах JPEG 2000 и PNG (протестировано на macOS 10.15.7 и macOS 11).
- Поддержка новых типов изображений, похоже, будет введена позже, чем ключевое поле (см. два предыдущих пункта). Таким образом, поддерживаемая версия ОС может быть неточной или корректироваться в зависимости от формата файла.
Другие типы
[ редактировать ]Тип ОС | Описание |
---|---|
'TOC '
|
«Оглавление» — список всех типов изображений в файле и их размеров (добавлено в Mac OS X 10.7 ).
TOC записывается как идентификатор (4 байта) и размер (4 байта). Каждая последующая запись (по 8 байт каждая) отображает к форматам значков, найденным в файле. Данные не включены в этот этап. |
'icnV'
|
4-байтовое число с прямым порядком байтов, равное номеру версии пакета Icon Composer.app, создавшего значок. |
'name'
|
Использование неизвестно (во всех протестированных файлах используется либо «значок», либо «значок»). [ 3 ] или «шаблон» [ 4 ] ). |
'info'
|
Информационный двоичный список. Использование неизвестно (кажется, используется только поле имени). |
'sbtp'
|
Вложенный файл icns «шаблона». Использование неизвестно. |
'slct'
|
Вложенный «выбранный» файл icns. Использование неизвестно. |
FD D9 2F A8
|
Вложенный «темный» файл icns. Позволяет автоматическое переключение значков в темном режиме . (добавлено в macOS 10.14 ).
Примечание. Содержимое этой записи представляет собой полный файл .icns в нескольких форматах. Если байты записи записаны на диск, заголовок и размер файла icns по-прежнему необходимы, чтобы увидеть значок полного темного режима. |
- Оглавление представляет собой список всех содержащихся типов (4 байта имени типа + 4 байта длины).
- Данные для всех вложенных файлов icns не содержат заголовка файла icns. Итак, если вы хотите сохранить данные в файл, вам необходимо добавить заголовок icns .
Типы элементов, отличных от PNG/JPEG2000
[ редактировать ]Типы элементов, которые работают с форматами изображений ARGB (32-бит) или RGB (24-бит), требуют разных типов заголовков перед двоичными данными. Важно отметить, что этот заголовок является частью данных изображения, а не 4-байтовым значением типа элемента значка с прямым порядком байтов (например, ic04 или ic05). [ 5 ]
ARGB-элементы Изображения ARGB должны иметь двоичную часть данных изображения, которой предшествует четырехбайтовый заголовок «ARGB». После этого вместо каждого пикселя, каждый из четырех каналов которого хранится вместе (например, ARGBARGBARGB), изображение с тремя пикселями будет храниться в отдельных каналах данных пикселей (например, AAARRRGGGBBB). Кроме того, каждый канал данных пикселей необходимо закодировать, как указано ниже.
RGB-элементы В изображениях RGB двоичная часть данных изображения предваряется четырьмя нулевыми байтовыми символами только в том случае, если тип элемента — «it32». Во всех остальных случаях заголовок не требуется. Данные канала разделяются так же, как и двоичные данные ARGB (например, RRRGGGBBB вместо RGBRGBRGB). Каждый канал также должен быть закодирован, как указано ниже.
Элементы маски Элементы маски не кодируются, как данные цветового канала изображения ARGB и RGB. Данные такие же, как и для изображения ARGB, за исключением того, что предоставляются только данные альфа-канала. Таким образом, для изображения, имеющего два пикселя, ARGBARGB, данные маски — AA.
Сжатие
[ редактировать ]вести ценить |
хвост байты |
результат несжатый |
---|---|---|
0 ... 127 | 1 ... 128 | 1 ... 128 байты |
128 ... 255 | 1 байт | 3 ... 130 копии |
Со временем формат был улучшен и появилась поддержка сжатия некоторых частей пиксельных данных. 24-битный RGB ( is32 , ил32 , их32 , это32 , ICp4 , icp5 ) и ARGB ( ic04 , ic05 , icsb ) данные пикселей сжимаются (поканально) в формате, аналогичном PackBits . [ 6 ] В некоторых источниках упоминается, что ОС поддерживает как сжатые, так и несжатые фрагменты данных. [ нужна ссылка ] Однако создание файлов icns вручную с несжатыми 24-битными изображениями RGB или ARGB не будет отображаться должным образом — по крайней мере, в новых выпусках macOS (проверено на macOS 11).
Вот репозиторий GitHub с некоторым быстрым кодом, который, похоже, проходит тест как на кодирование, так и на декодирование, как описано здесь: ByteRunLengthCoder
Следующий псевдокод распаковывает данные:
While there is 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
Пример: 02 01 02 02 80 03 81 04 82 05
следует распаковать до 01 02 02 03 03 03 04 04 04 04 05 05 05 05 05
Следующий псевдокод сжимает данные:
function Encode(input data) Initialize output as an empty array Set index to 0 While index < the count of data Initialize sequence as an empty array Set count to 0 // Unique sequence While count ≤ 0x7F and index < count of data If index + 2 < count of data and data[index] = data[index+1] and data[index] = data[index+2] Break the loop // Start of a repeating sequence End If Append data[index] to sequence Increment index Increment count End While If sequence is not empty Append (count - 1) to output Append all items in sequence to output End If If index ≥ count of data Break the loop End If // Repeating sequence Set repeatedByte to data[index] Set count to 0 While count ≤ 0x7F and index ≤ data and data[index] = repeatedByte Increment index Increment count End While If count ≥ 3 Append (0x80 + count - 3) to output Append repeatedByte to output Else // Less than 3 repeating bytes Append (count - 1) to output Repeat (count) times Append repeatedByte to output End Repeat End If End While Return output End function
Пример: 01 02 02 03 03 03 04 04 04 04 05 05 05 05 05
должен сжиматься до 02 01 02 02 80 03 81 04 82 05
Известные проблемы
[ редактировать ]Начиная с macOS 11, существуют определенные проблемы/ошибки с форматом файла:
- Параметр is32+ics8 или ih32+ich8 отобразит правильный значок. Но установка il32+icl8 игнорирует маску прозрачности и отображает значок без прозрачности.
- Сжатые данные ARGB интерпретируются неправильно. Последнее значение синего канала (то есть самое последнее значение) игнорируется и обрабатывается так, как если бы оно было нулевым байтом. Обычно это не проблема, поскольку большинство значков в любом случае имеют прозрачность в правом нижнем углу. Однако это может стать проблемой, если последнее значение является повторяющимся байтом (см. Сжатие ). Потенциально до 130 пикселей может не иметь значения синего канала.
Обходной путь — добавить в конец дополнительный байт, который интерпретируется как управляющий символ без последующих данных. Вы можете сравнить разницу с этими двумя примерами:69636E73 00000024 69633034 0000001C 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF
69636E73 00000025 69633034 0000001D 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF 00
- В macOS 10.15.7 (вероятно, более ранней версии) и более поздних версиях возникает проблема с отображением значков PNG и JPEG 2000 для клавиш. icp4 (16х16), ICP5 (32x32) и ICP6 (64х64). Клавиши работают нормально в отдельном файле icns, но если они используются в приложении, значки отображаются полностью зашифрованными. Либо используйте новый формат ARGB ic04 и ic05 (macOS 11+) или старый формат 24-битной RGB + альфа-маски. Используйте последний со старыми ключами is32+s8mk и il32+l8mk или с более новыми ключами icp4+s8mk и icp5+l8mk (запись данных RGB в поля PNG) [ 2 ] ). При использовании данных изображения ARGB обязательно укажите альтернативные форматы для macOS 10.15 и более ранних версий. Эту проблему особенно сложно обнаружить, если вы предоставляете оба значка: 16x16 и 16x16@2x, поскольку если вы подключаете свой Mac к монитору без Retina, будет использоваться значок 16x16 без Retina, и поэтому значок будет отображаться в зашифрованном виде. Поле icp6 , похоже, не используется в значках приложений, и его можно смело игнорировать. Кроме того, если вы вообще не предоставите значки меньшего размера, ошибка также проявится, когда ОС уменьшит ваши большие значки PNG/JPEG 2000, поэтому обязательно визуализируйте меньшие размеры и включите их.
Поддерживать
[ редактировать ]Различные программы просмотра изображений могут загружать *.icns файлы, а также существуют бесплатные конвертеры с открытым исходным кодом из PNG или в PNG . [ 7 ] [ 8 ] GTK+ может загрузить *.icns ресурсы с 2007 года. [ 9 ] Другие инструменты, поддерживающие этот формат, включают Apple Icon Composer и icns Browser , The Iconfactory и IconBuilder .
MacOS [ нужны разъяснения ] предлагает встроенный iconutil
инструмент командной строки для упаковки и распаковки *.icns файлы.
См. также
[ редактировать ]- Формат ICO в Windows
- X PixMap Формат для X11
Ссылки
[ редактировать ]- ^ «Руководство по человеческому интерфейсу» . Apple Inc. Архивировано из оригинала 18 июня 2018 года . Проверено 10 апреля 2021 г.
- ^ Перейти обратно: а б с Значок системы: /System/Library/CoreServices/Applications/Screen Sharing.app/Contents/Resources/InternetLocationVNC.icns , macOS 11
- ^ Значок системы: /System/Library/PrivateFrameworks/PassKitCore.framework/Versions/A/Resources/GenericIcon.icns , macOS 10.15.7
- ^ Значок системы: /System/Library/PrivateFrameworks/ConsoleKit.framework/Versions/A/Resources/SidebariPhone.icns , macOS 10.15.7
- ^ Репозиторий Fiahfy ICNS
- ^ Иконки Macintosh
- ^ «либиконы» . SourceForge Иконки проекта . 2009 . Проверено 18 августа 2016 г.
- ^ «png2icns» . Мойн Уддин. 2016 . Проверено 25 мая 2017 г.
- ^ Лионель Винсент (2007). «Значки Mac OS X для GTK+» . Проверено 18 августа 2016 г.
Внешние ссылки
[ редактировать ]- IconFamily (последнее обновление 2013 г.) — класс Objective C с открытым исходным кодом для чтения и записи файлов Apple icns.
- osxiconutils (не поддерживается) — инструменты командной строки для работы с файлами Apple icns.
- icnsutil — библиотека Python для чтения и записи файлов icns.
- icns — крейт Rust для чтения и записи файлов icns.
- createicns — библиотека C для чтения и записи файлов icns
- icon_records_extractor — библиотека C для извлечения всех записей icns, поскольку их собственные значки включают icns темного режима.