Appleアイコン画像フォーマット

Appleアイコン画像
ICNS アイコン。
ファイル名拡張子
.icns
インターネットメディアの種類画像/x-icns
タイプコードicns
統一型識別子(UTI)com.apple.icns
魔法の数字69 63 6e 73
開発者アップル社
フォーマットの種類アイコン ファイル形式

Apple Icon Image形式(.icns)は、Apple Inc.macOSで使用されるアイコン形式です。16×16、32×32、48×48、128×128、256×256、512×512ポイントのアイコンを1倍および2倍のスケールでサポートし、1ビットおよび8ビットのアルファチャンネルと複数の画像状態(例:開いているフォルダと閉じているフォルダ)に対応しています。固定サイズのアイコンは、オペレーティングシステムによって拡大縮小され、任意の中間サイズで表示されます。

macOS 11以降、アセットカタログはmacOSカスタムアイコンの推奨ファイル形式です。[1]

ファイル構造

ファイル形式は、8 バイトのヘッダーとそれに続く任意の数のアイコンで構成されます。

オフセットサイズ目的
04マジックリテラル、「icns」である必要があります (0x69、0x63、0x6e、0x73)
44ファイルの長さ(バイト単位、MSBが先)

アイコンデータ

オフセットサイズ目的
04アイコンの種類については、以下の OSType を参照してください。
44データの長さ(バイト単位、型と長さを含む)、MSBが先頭
8変数アイコンデータ

アイコンの種類

OSタイプ長さ(バイト)サイズ(ピクセル)サポートされているOSバージョン説明
アイコン12832×321.01ビットモノアイコン
ICN番号25632×326.01ビットマスク付き1ビットモノアイコン
icm#4816×126.01 ビット マスク付き 1 ビット モノ アイコン
icm49616×127.04ビットアイコン
icm819216×127.08ビットアイコン
ics#6416×166.01ビットマスク付き1ビットモノアイコン
ics412816×167.04ビットアイコン
ics825616×167.08ビットアイコン
is32変動1 (768)16×168.524ビットRGBアイコン
s8mk25616×168.58ビットマスク
icl451232×327.04ビットアイコン
icl8102432×327.08ビットアイコン
il32変化1 (3072)32×328.524ビットRGBアイコン
l8mk102432×328.58ビットマスク
ich#57648×488.51ビットマスク付き1ビットモノアイコン
ich4115248×488.54ビットアイコン
ich8230448×488.58ビットアイコン
ih32変化1 (6912)48×488.524ビットRGBアイコン
h8mk230448×488.58ビットマスク
it32変化する1 (49152 + 4) 2128×12810.024ビットRGBアイコン
t8mk16384128×12810.08ビットマスク
icp4様々16x1610.7JPEG 2000 またはPNG 形式または24ビットRGBアイコン[2]
icp5様々32x3210.7JPEG 2000 またはPNG 形式または24ビットRGBアイコン[2]
icp6様々48x4810.7JPEG 2000 またはPNG 形式
ic07様々128x12810.7JPEG 2000またはPNG形式
ic08様々256x25610.5JPEG 2000またはPNG形式
ic09様々512x51210.5JPEG 2000またはPNG形式
ic10様々1024x102410.7JPEG 2000またはPNG形式 (10.8 では 512x512@2x "retina")
ic11様々32x3210.8JPEG 2000またはPNG形式 (16x16@2x "retina")
ic12様々64x6410.8JPEG 2000またはPNG形式 (32x32@2x "retina")
ic13様々256x25610.8JPEG 2000またはPNG形式 (128x128@2x "retina")
ic14様々512x51210.8JPEG 2000またはPNG形式 (256x256@2x "retina")
ic041 (1024)変化する16x16ARGB またはJPEG 2000 またはPNG 形式
ic05変化1 (4096)32x32ARGB またはJPEG 2000 またはPNG 形式 (16x16@2x "retina")
icsb変化する1 (1296)18x18ARGB またはJPEG 2000 またはPNG 形式
icsB様々36x36JPEG 2000またはPNG形式 (18x18@2x "retina")
sb24様々24時間365日JPEG 2000またはPNG形式
SB24様々48x48JPEG 2000またはPNG形式 (24x24@2x "retina")
  • 1.括弧内の値は、ARGB および 24 ビット RGB アイコンの非圧縮長です。
  • 2. it32データは常に4つのゼロバイトのヘッダーで始まります(macOS 10.15.7およびmacOS 11ですべてのicnsファイルをテスト済み)。使用法は不明ですが、4つのゼロバイトは任意の値になる可能性があり、暗黙的に無視されます。
  • †.これらの形式はスタンドアロンの icns ファイルではサポートされていますが、.appパッケージ内のアプリケーション アイコンとして使用すると正しく表示されません。

画像データ形式

  • アルファマスク付きのモノアイコンは、白、黒、透明の 3 色を表示できます。
  • 4 ビットおよび 8 ビットのアイコンでは、それぞれ 16 色と 256 色の固定カラー パレットが使用されます。
  • 24ビットRGBフォーマットは、3つの圧縮されたチャンネルが密集した構造になっています(圧縮を参照)。it32アイコン4バイトのヘッダーで始まる必要があります(上記の脚注を参照)。
  • ARGB 形式は、「ARGB」の ASCII 値と、密に圧縮された 4 つのチャネルで構成されます (「圧縮」を参照)。

互換性

  • ARGB フィールドでは PNG 形式のファイルも受け入れますが、その逆はできません。PNG のみのフィールドに ARGB 画像を配置することはできません (macOS 11 でテスト済み)。
  • ARGB画像はmacOS 11以降でのみサポートされています。macOS 10.15.7ではARGB画像が表示されません。ただし、JPEG 2000またはPNG画像を設定すると、macOS 10.15でもARGBキーを表示できます(上記のアプリパッケージでの使用に関する脚注を参照)。
  • 24 ビット RGB アイコン ( is32il32ih32it32 ) では、JPEG 2000 および PNG 形式の画像も使用できます (macOS 10.15.7 および macOS 11 でテスト済み)。
  • 新しいイメージタイプのサポートは、キーフィールドよりも後に導入されたようです(前の2つのポイントを参照)。そのため、サポートされるOSバージョンは正確ではない場合や、ファイル形式に基づいて調整される場合があります。

その他のタイプ

OSタイプ説明
'TOC '「目次」は、ファイル内のすべての画像タイプとそのサイズのリストです ( Mac OS X 10.7で追加されました)。

TOCは識別子(4バイト)とサイズ(4バイト)として書き出されます。後続の各レコード(各8バイト)は、ファイル内のアイコン形式にマッピングされます。このフェーズではデータは含まれません。

'icnV'4バイトのビッグエンディアン浮動小数点数 - アイコンを作成したIcon Composer.appのバンドルバージョン番号に等しい
'name'使用法は不明です(テストしたファイルはすべて「icon」[3]または「template」[4]のいずれかを使用しています)。
'info'情報バイナリplist。使用法は不明です(名前フィールドのみが使用されているようです)。
'sbtp'ネストされた「テンプレート」icns ファイル。使用法は不明です。
'slct'ネストされた「選択された」icns ファイル。使用法は不明です。
FD D9 2F A8ネストされた「dark」icnsファイル。ダークモードでアイコンの自動切り替えを可能にします。(macOS 10.14で追加されました)。

注: このレコードの内容は、複数の形式を持つ完全な .icns ファイルです。レコードのバイトがディスクに書き出される場合でも、ダークモードアイコン全体を表示するには、icns ファイルのヘッダーとファイルサイズが必要です。

  • 目次は、含まれるすべての型 (4 バイトの型名 + 4 バイトの長さ) のリストです。
  • ネストされたすべてのICNSファイルのデータにはICNSファイルヘッダーが含まれていません。そのため、データをファイルに保存する場合は、ICNSヘッダーを先頭に追加する必要があります。

PNG / JPEG2000以外の要素タイプ

ARGB(32ビット)またはRGB(24ビット)画像形式を扱う要素型では、バイナリデータの前に異なる種類のヘッダーが必要です。このヘッダーは画像データの一部であり、4バイトのビッグエンディアンアイコン要素型の値(例:ic04またはic05)ではないことに注意することが重要です。[5]

ARGB要素ARGB画像では、画像データのバイナリ部分の前に4バイトの「ARGB」ヘッダーが必要です。これにより、各ピクセルの4つのチャンネルがまとめて保存される(例:ARGBARGBARGB)のではなく、3つのピクセルを持つ画像は個別のチャンネルのピクセルデータとして保存されます(例:AAARRRGGGBBB)。さらに、各チャンネルのピクセルデータは、以下のようにエンコードする必要があります。

RGB要素RGB画像では、要素タイプが「it32」の場合のみ、画像データのバイナリ部分の先頭に4つの0バイト文字が付加されます。それ以外の場合は、ヘッダーは必要ありません。チャンネルデータはARGBバイナリデータと同様に区切られます(例:RGBRGBRGBではなくRRRGGGBBB)。各チャンネルは、以下に示すようにエンコードする必要があります。

マスク要素マスク要素は、 ARGBやRGB画像のカラーチャンネルデータのようにエンコードされません。アルファチャンネルデータのみが提供される点を除けば、ARGB画像のデータと同じです。つまり、2つのピクセルを持つ画像(ARGB、ARGB)の場合、マスクデータはAAになります。

圧縮

リード
価値
末尾
バイト
結果
圧縮なし
  0...1271...1281...128バイト
128...2551バイト3...130コピー

時間の経過とともにフォーマットが改良され、ピクセルデータの一部の圧縮がサポートされるようになりました。24ビットRGB(is32il32ih32it32icp4icp5)およびARGB(ic04ic05icsb )ピクセルデータは、 PackBitsに似たフォーマットで(チャネルごとに)圧縮されます[6]一部の情報源によると、OSは圧縮データチャンクと非圧縮データチャンクの両方をサポートしているとのことです。[要出典]ただし、圧縮されていない24ビットRGBまたはARGB画像を含むicnsファイルを手動で作成しても、少なくとも新しいmacOSリリース(macOS 11でテスト済み)では正しく表示されません。

ここに、エンコードとデコードの両方のテストに合格すると思われるSwiftコードを含むGitHubリポジトリがあります:ByteRunLengthCoder

次の疑似コードはデータを解凍します。

圧縮されたデータある場合: 1バイトを符号なし数値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設定します。  // 一意のシーケンス count  0x7Fかつindex <データ数 インデックス+ 2 <データ数 かつdata [index] = data [index+1]かつdata [index] = data [index+2]ループを中断// 繰り返しシーケンスの開始End If        シーケンスデータ[インデックス]を追加する  インデックスを増分 カウントを増分する 終了  シーケンスが空でない 場合、出力(count - 1)を追加します。シーケンス内のすべての項目を出力 追加します。終了  インデックスデータ ループ終了   // 繰り返しシーケンス repeatedByte をdata [index]設定countを0 設定count  0x7Fかつindex  dataかつdata [index] = repeatedByte の場合   インデックスを増分 カウントを増分する 終了  count  3 の場合、出力 (0x80 + count - 3)を追加します。出力 repeatedByte を追加します。それ以外の場合、繰り返しバイトが 3 未満の場合、出力 (count - 1)を追加します。 (count) 回 繰り返します。出力 repeatedByteを追加します。End Repeat 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ピクセル分、青チャンネルの値が欠落する可能性があります。
    回避策としては、末尾に制御文字として解釈されるバイトを追加し、後続のデータを無視します。次の2つの例で違いを比較できます。
    • 69636E73 00000024 69633034 0000001C 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF
    • 69636E73 00000025 69633034 0000001D 41524742 FFFFFBFF FF00FB00 FF00FB00 FFFFFBFF 00
  3. macOS 10.15.7(おそらくそれ以前)以降のバージョンでは、icp4(16x16)、icp5(32x32)、icp6(64x64)のキーのPNGおよびJPEG 2000アイコンを表示する際に問題が発生します。これらのキーはスタンドアロンのicnsファイルでは問題なく機能しますが、アプリケーション内で使用すると、アイコンが完全に乱れて表示されます。新しいARGB形式ic04ic05(macOS 11以降)または古い24ビットRGB + アルファマスク形式を使用してください。後者は、古いキーis32+s8mkil32+l8mk、または新しいキーicp4+s8mkicp5+l8mk(RGBデータをPNGフィールドに書き込む[2]))で使用します。ARGB画像データを使用する場合は、macOS 10.15以前用の代替形式を提供するようにしてください。この問題は、16x16と16x16@2xの両方のアイコンを提供している場合、特に検出が困難です。MacをRetina非対応モニターに接続すると、Retina非対応の16x16アイコンが使用され、アイコンが乱れて表示されるためです。icp6フィールドはアプリケーションアイコンでは使用されていないため、無視しても問題ありません。また、小さいアイコンサイズを全く提供していない場合 OSが大きなPNG/JPEG 2000アイコンを縮小した際にもこのバグが発生します。そのため、小さいサイズのアイコンをレンダリングし、それらを含めるようにしてください。

サポート

PreviewGTK+など様々なアプリ*.icnsでファイルを開くことができ、 PNGとの変換機能を提供するアプリもあります。[7] [8] [9]以前、アイコンファイルのサポートに特化したツールとしては、AppleのIcon Composericns Browser 、 The IconfactoryIconBuilderPanicCandyBarなどがあります*.icns

macOSには、ファイルをパックおよび解凍するための組み込みiconutilコマンドラインツールが用意されています*.icns[10]

参照

参考文献

  1. ^ “Human Interface Guidelines”. Apple Inc. 2018年6月18日時点のオリジナルよりアーカイブ2021年4月10日閲覧。
  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. ^ "libicns". SourceForgeプロジェクトicns. 2009年. 2016年8月18日閲覧
  8. ^ "png2icns". Moin Uddin. 2016年. 2017年5月25日閲覧
  9. ^ Lyonel Vincent (2007). 「GTK+用Mac OS Xアイコン」 . 2016年8月18日閲覧
  10. ^ 「高解像度への最適化」。developer.apple.com . 20253月22日閲覧。
  • IconFamily (最終更新 2013) – Apple icns ファイルの読み書きを行うオープンソースの Objective C クラス
  • osxiconutils (メンテナンスされていません) – Apple icns ファイルを操作するコマンドラインツール
  • icnsutil – icnsファイルを読み書きするためのPythonライブラリ
  • icns - icns ファイルを読み書きするための Rust クレート
  • createicns - icns ファイルを読み書きするための C ライブラリ
  • icon_records_extractor - ダーク モードの icns を含むすべての icns レコードを独自のアイコンとして抽出する C ライブラリ。
「https://en.wikipedia.org/w/index.php?title=Apple_Icon_Image_format&oldid=1305033426」から取得