Jump to content

Формат изображения значка Apple

(Перенаправлено с изображения значка Apple )

Изображение значка 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 варьируется 24x24 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, существуют определенные проблемы/ошибки с форматом файла:

  1. Параметр is32+ics8 или ih32+ich8 отобразит правильный значок. Но установка il32+icl8 игнорирует маску прозрачности и отображает значок без прозрачности.
  2. Сжатые данные ARGB интерпретируются неправильно. Последнее значение синего канала (то есть самое последнее значение) игнорируется и обрабатывается так, как если бы оно было нулевым байтом. Обычно это не проблема, поскольку большинство значков в любом случае имеют прозрачность в правом нижнем углу. Однако это может стать проблемой, если последнее значение является повторяющимся байтом (см. Сжатие ). Потенциально до 130 пикселей может не иметь значения синего канала.
    Обходной путь — добавить в конец дополнительный байт, который интерпретируется как управляющий символ без последующих данных. Вы можете сравнить разницу с этими двумя примерами:
    • 69636E73 00000024 69633034 0000001C 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF
    • 69636E73 00000025 69633034 0000001D 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF 00
  3. В 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 файлы.

См. также

[ редактировать ]
  1. ^ «Руководство по человеческому интерфейсу» . Apple Inc. Архивировано из оригинала 18 июня 2018 года . Проверено 10 апреля 2021 г.
  2. ^ Перейти обратно: а б с Значок системы: /System/Library/CoreServices/Applications/Screen Sharing.app/Contents/Resources/InternetLocationVNC.icns , macOS 11
  3. ^ Значок системы: /System/Library/PrivateFrameworks/PassKitCore.framework/Versions/A/Resources/GenericIcon.icns , macOS 10.15.7
  4. ^ Значок системы: /System/Library/PrivateFrameworks/ConsoleKit.framework/Versions/A/Resources/SidebariPhone.icns , macOS 10.15.7
  5. ^ Репозиторий Fiahfy ICNS
  6. ^ Иконки Macintosh
  7. ^ «либиконы» . SourceForge Иконки проекта . 2009 . Проверено 18 августа 2016 г.
  8. ^ «png2icns» . Мойн Уддин. 2016 . Проверено 25 мая 2017 г.
  9. ^ Лионель Винсент (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 темного режима.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5d635c65d692ff0cdbf68c9c562a0b24__1704998640
URL1:https://arc.ask3.ru/arc/aa/5d/24/5d635c65d692ff0cdbf68c9c562a0b24.html
Заголовок, (Title) документа по адресу, URL1:
Apple Icon Image format - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)