stringtranslate.com

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

Формат изображения значка Apple (.icns) — это формат значков , используемый в macOS компании Apple Inc. Он поддерживает значки размером 16 × 16, 32 × 32, 48 × 48, 128 × 128, 256 × 256, 512 × 512 точек в масштабе 1x и 2x, с 1- и 8 - битными альфа-каналами и несколькими состояниями изображения (пример : открытые и закрытые папки). Значки фиксированного размера могут масштабироваться операционной системой и отображаться в любом промежуточном размере.

Начиная с macOS 11 , каталоги ресурсов являются предпочтительным форматом файлов для пользовательских значков macOS. [1]

Структура файла

Формат файла состоит из 8-байтового заголовка, за которым следует любое количество значков.

Заголовок

Данные значка

Типы значков

Формат данных изображения

Совместимость

Другие типы

Типы элементов, отличных от 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.

Сжатие

Со временем формат был улучшен и появилась поддержка сжатия некоторых частей пиксельных данных. 24-битные данные пикселей RGB ( is32 , il32 , ih32 , it32 , icp4 , icp5 ) и ARGB ( ic04 , ic05 , icsb ) сжимаются (на канал) в формате, аналогичном PackBits . [6] В некоторых источниках упоминается, что ОС поддерживает как сжатые, так и несжатые фрагменты данных. [ нужна цитация ] Однако создание файлов icns вручную с несжатыми 24-битными изображениями RGB или ARGB не будет отображаться должным образом — по крайней мере, в новых выпусках macOS (проверено на macOS 11).

Вот репозиторий GitHub с некоторым быстрым кодом, который, похоже, проходит тест как на кодирование, так и на декодирование, как описано здесь: ByteRunLengthCoder

Следующий псевдокод распаковывает данные:

Пока есть сжатые данные: Считайте один байт как беззнаковое число N. Если N < 0x80: Выведите следующие (N + 1) байты Еще : Вывести следующий байт (N — 0x80 + 3) раз.

Пример: 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

Следующий псевдокод сжимает данные:

функция Encode (входные данные) Инициализировать вывод как пустой массив  Установить индекс в 0 Пока индекс < количество данных. Инициализировать последовательность как пустой массив.  Установить счетчик равным 0. // Уникальная последовательность  While count  0x7F и индекс < количество данных If index + 2 < количество данных и data [index]  = data [index+1] и data [index] = data [index+2 ] Прервать цикл / / Начало повторяющейся последовательности End If       Добавить данные [индекс] в последовательность  Индекс приращения Количество приращений Конец  пока Если последовательность не пуста  . Добавить (счетчик - 1) к выходным данным . Добавить все элементы последовательно к выходным данным . Конец,  если Если индекс  количества данных. Прервать цикл .  Конец.  Если. // Повторяющаяся последовательность  Установить повторенный Байт в data [index] Установить счетчик в 0 Пока счетчик  0x7F и индекс  данные и данные [индекс] = повторенный Байт   Индекс приращения Количество приращений Конец  пока Если count  3 Добавить (0x80 + count - 3) к выходным данным Добавить повторенный байт к выходным данным Else  // Менее 3 повторяющихся байтов  Добавить (count - 1) к выходным данным Повторить (счетное количество) раз Добавить повторенный байт к выходным данным End  Повторить  End  If  End  While Обратный вывод Конечная  функция

Пример: 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 (16x16), icp5 (32x32) и icp6 (64x64). Клавиши работают нормально в отдельном файле 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. ^ abc Значок системы: /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 г.

Внешние ссылки