aspose.info
JA

FLIF ファイル形式

更新日

.FLIFファイルとは何ですか?

FLIF (Free Lossless Image Format) は、ファイルに .flif 拡張子を使用するロスレス イメージ フォーマットです。 FLIF は、圧縮率に関して、PNG、ロスレス WebP、ロスレス BPG、およびロスレス JPEG 2000 よりも優れていると主張しています。 FLIF はプログレッシブ インターレースを使用するため、画像の部分的なダウンロードを画像全体の非可逆エンコーディングとして使用できます。

簡単な歴史

FLIF は 2015 年 9 月に発表され、2015 年 10 月にアルファ版がリリースされました。2016 年 9 月には、FLIF の最初の安定版がリリースされました。

FLIFデザイン##

FLIF は、CABAC (Context-adaptive Binary Arithmetic Coding) の変形である MANIAC (Meta-Adaptive Near-zero Integer Arithmetic Coding) を圧縮に使用します。 MANIAC は、Jon Sneyers と Pieter Wuille によって開発されたエントロピー コーディング アルゴリズムです。 MANIAC では、コンテキストは、エンコーディング時に動的に学習される決定木のノードです。これにより、コンテキスト モデルがより画像固有になり、圧縮が向上します。 FLIF には次の機能があります。

  • 可逆圧縮をサポート
  • エンコーダの前処理による非可逆圧縮をサポート
  • グレースケール、RGB、RGBA をサポート
  • チャンネルあたり 1 ~ 16 ビットの色深度をサポート
  • インターレース ファイルと非インターレース ファイルをサポート
  • 部分的にダウンロードされたファイルのプログレッシブ デコードをサポート
  • アニメーションをサポート
  • 埋め込み ICC カラー プロファイル、Exif および XMP メタデータをサポート
  • Camera Raw ファイル (RGGB) の圧縮を限定的にサポート

FLIF ファイル形式

FLIF ファイルには、次の 4 つの部分があります。

メインヘッダー

メイン ヘッダーには、幅、高さ、色深度、フレーム数などのメイン メタデータが含まれます。

タイプ値説明
4バイト“FLIF”マジック
4 ビット3 = ni まだ; 4 = 私はまだです。 5 = アニメ; 6 = i animインターレース、アニメーション
4 ビット1 = グレースケール。 3 = RGB; 4 = RGBAチャンネル数 (nb_channels)
1 バイト‘0’,‘1’,‘2’ (‘0’=カスタム)チャネルあたりのバイト数 (Bpc)
varint幅-1幅
varintheight-1高さ
varintnb_frames-2 (アニメーションの場合のみ)フレーム数 (nb_frames)

メタデータ チャンク

この部分には、DEFLATE 圧縮を使用してエンコードされた Exif/XMP メタデータ、ICC カラー プロファイルなどの非ピクセルが含まれます。これらのチャンクは PNG チャンクと同様に定義されますが、チャック サイズが可変バイト数でエンコードされる点が異なります。チャンクの名前は、4 文字 (4 バイト) またはオプションではないチャンクを示す 32 未満の値にすることができます。

以下は、オプションのチャックの例です。

チャンク名説明内容(DEFLATE解凍後)
iCCPICC カラー プロファイル生の ICC カラー プロファイル データ
eXifExif メタデータ“Exif\0\0” ヘッダーの後に TIFF ヘッダーと EXIF データが続きます
eXmpXMP メタデータパディングなしの読み取り専用 xpacket 内に含まれる XMP

### 命名規則 ###

  • 最初の文字: 重要なチャンクには大文字が使用され、重要でないチャンクには小文字が使用されます。
  • 2 番目の文字: パブリック チャンクには大文字が使用され、プライベート チャンクには小文字が使用されます
  • 3 番目の文字: 画像を正しく表示するために必要なチャックには大文字が使用され、画像を表示するために小文字は重要ではありません。
  • 4 番目の文字: 盲目的に安全にコピーできるチャックには大文字が使用されます。小文字のチャックは画像データに依存します。

2 番目のヘッダー

これには、ピクセルの実際のエンコードに関する情報が含まれています。

タイプ説明条件デフォルト値
1 バイトNUL バイト (0x00)、FLIF16 ビットストリームのチャンク名
uni_int(1,16)チャネルのピクセルあたりのビット数Bpc == ‘0’: repeat(nb_channels)Bpc == ‘1’ の場合は 8、Bpc == ‘2’ の場合は 16
uni_int(0,1)フラグ: alpha_zeronb_channels > 30
uni_int(0,100)ループ数nb_frames > 1
uni_int(0,60_000)ミリ秒単位のフレーム遅延nb_frames > 1: repeat(nb_frames)
uni_int(0,1)フラグ: has_custom_cutoff_and_alpha
uni_int(1,128)カットオフhas_custom_cutoff_and_alpha2
uni_int(2,128)アルファ除数has_custom_cutoff_and_alpha19
uni_int(0,1)フラグ: has_custom_bitchancehas_custom_cutoff_and_alpha0
?ビッチンスhas_custom_bitchance
変数変換 (下記参照)
uni_int(1) = 0インジケータ ビット: 変換完了
uni_int(0,2)不可視ピクセル予測子alpha_zero && インターレース && ゼロを含むアルファ範囲

チャンネル

チャンネル番号説明
0赤または灰色
1緑
2青
3アルファ

変換

タイプ説明
uni_int(1) = 1インジケータ ビット: まだ完了していません
uni_int(0,13)変換識別子
変数変換データ (変換に依存)

変換は、より良い圧縮のためにピクセル データを変更し、実際に発生するピクセル値を追跡するために使用されます。

ピクセル データ

この部分には、MANIAC エントロピー コーディングを使用してエンコードされた実際のピクセル データが含まれます。ピクセルは、インターレースまたは非インターレース符号化を使用して符号化することができます。

インターレース方式

このメソッドでは、ズームレベルが定義されています。ズームレベル 0 はイメージ全体に使用され、ズームレベル 1 はすべての偶数行に使用され、ズームレベル 2 はズームレベル 1 のすべての偶数列に使用されます。つまり、すべての偶数ズームレベル 2k は、縮尺 1:2^k の画像。ズームレベルは、最高から最低の順にエンコードされます。

ノンインターレース方式

この方法では、MANIAC ツリーのエンコードがすぐに開始され、続いてピクセルのエンコードが行われます。

参照

関連項目