Color Modes

Magick イメージファイル形式

MIFF ヘッダーMIFF バイナリデータ

Magick イメージファイル形式(MIFF)は、ImageMagick独自のプラットフォームに依存しないビットマップ画像保存形式です。他の画像形式に比べて、ImageMagickで認識されるすべてのメタデータ(画像のカラープロファイル、コメント、作成者、著作権など)を保存できるという利点があります。一方、他の形式では、利用可能なメタデータの一部しかサポートされない、またはまったくサポートされない場合があります。MIFFイメージファイルは2つのセクションで構成されています。最初のセクションは、テキスト形式で画像を記述するキーで構成されるヘッダーです。次のセクションは、バイナリイメージデータです。以下でこれらのセクションについて詳しく説明します。

MIFF ヘッダー

MIFFヘッダーは、完全にISO-8859-1文字で構成されています。ヘッダー内のフィールドは、`key = value`形式のキーと値の組み合わせであり、各キーと値は等号(=)で区切られています。各`key = value`の組み合わせは、少なくとも1つの制御文字または空白文字で区切られています。ヘッダーセクションにはコメントを含めることができ、常に中括弧で区切られています。MIFFヘッダーは常にコロン(:)文字で終了し、その後にctrl-Z文字が続きます。コロンの前に改ページ文字と改行文字を付けることも一般的です。改ページ文字は、more Linuxプログラムを使用する場合のバイナリデータの表示を防止し、ctrl-Z文字はWindowsコマンドラインのtypeコマンドで同様の効果があります。

以下は、MIFFファイルに通常含まれる` key = value`組み合わせの部分的なリストです。

background-color =
border-color =
matte-color = これらのオプションキーは、それぞれ画像の背景色、境界線の色、マットの色を表します。は、名前(例:white)または16進値(例:#ccc)にすることができます。
class = { DirectClass, PseudoClass } MIFFファイルに保存されているバイナリピクセルデータの種類です。このキーが存在しない場合、DirectClassピクセルデータが想定されます。
colors = DirectClass画像の色数です。PseudoClass画像の場合、このキーはカラーマップのエントリ数を指定します。このキーがヘッダーに存在せず、画像がPseudoClassの場合、線形256色のグレースケールカラーマップが想定されます。カラーマップエントリの最大数は65536です。
colorspace = { RGB, CMYK, ... } ピクセルデータのカラー空間です。デフォルトはRGBです。
columns = 値 ピクセル単位の画像の幅です。これは必須キーであり、デフォルト値はありません。
compression = {BZip, None, Zip, ... } 画像データの圧縮に使用されるアルゴリズムの種類です。このキーが存在しない場合、ピクセルデータは非圧縮であると想定されます。
delay = マイクロ秒 イメージシーケンスにおけるフレーム間の遅延(マイクロ秒単位)。
depth = { 8, 16, 32 } 単一の色値の深度。0~255(深度8)、0~65535(深度16)、0~4294967295(深度32)の値を表します。このキーがない場合、深度8が想定されます。
dispose = レイヤーの破棄方法。有効な値は以下のとおりです。
    0. 破棄方法が指定されていません。
    1. フレーム間で破棄しません。
    2. ヘッダーの背景色でフレームを上書きします。
    3. 前のフレームで上書きします。
gamma = 画像のガンマ値です。指定されていない場合、ガンマ値1.0(線形輝度応答)が想定されます。
id=ImageMagick ファイルをMIFF形式の画像ファイルとして識別します。このキーは必須であり、最初のキーと値のペアでなければならず、一度しか表示できません。デフォルト値はありません。このキーはヘッダー内のどこにでも表示できますが、1列目のヘッダーの最初のキーとして開始する必要があります。これにより、file(1)などのプログラムは、ファイルをMIFFとして簡単に識別できます。
iterations = イメージシーケンスが停止する前にループする回数。
label = { 文字列 } 画像の短いタイトルまたはキャプションを定義します。ラベルに空白文字が含まれる場合は、中括弧で囲む必要があります。
matte = { True, False } 画像にマットデータがあるかどうかを指定します。マットデータは、一般的に画像合成に役立ちます。
montage = <幅>x<高さ>[+-]<xオフセット>[+-]<yオフセット> 合成画像の個々のタイルのサイズと位置。画像が複数の異なるタイルの合成である場合、このキーを使用します。タイルは、画像とオプションで境界線とラベルで構成されます。は、水平方向の各個々のタイルのピクセルサイズであり、高さは垂直方向のサイズです。各タイルは、幅と高さのピクセル数が同じである必要があります。ただし、幅と高さは異なる場合があります。Xオフセットは、合成画像の垂直エッジから行の最初のタイルが始まるピクセル数オフセットであり、Yオフセットは、列の最初のタイルが始まる水平エッジからのオフセットです。このキーが指定されている場合、タイル名のディレクトリがイメージヘッダーの後に続く必要があります。ディレクトリの形式については、以下で説明します。
page = 画像キャンバスの推奨サイズと位置。
profile-icc = International Color Consortiumカラープロファイルのバイト数。プロファイルは、http://www.color.org/icc_specs2.htmlにあるICCプロファイル仕様で定義されています。
red-primary = x,y
green-primary = x,y
blue-primary = x,y
white-point = x,y このオプションキーは、色度原色と白点を反映しています。
rendering-intent = { saturation, perceptual, absolute, relative } レンダリングインテントは、International Color Consortium(http://www.color.org)によって定義されているCSS-1プロパティです。
resolution = <x解像度>x<y解像度> 画像の垂直および水平解像度。具体的な解像度単位(例:インチあたりのピクセル数)については、単位を参照してください。
rows = ピクセル単位の画像の高さです。これは必須キーであり、デフォルト値はありません。
scene = このMIFFイメージファイルのシーケンス番号です。このオプションキーは、MIFFイメージファイルがアニメーションで使用されるファイルシーケンスの1つである場合に役立ちます。
signature = このオプションキーには、画像ピクセルコンテンツを一意に識別する文字列が含まれています。NISTのSHA-256メッセージダイジェストアルゴリズムが推奨されます。
units = { pixels-per-inch, pixels-per-centimeter } 画像解像度の単位。

その他のキーと値のペアが許可されます。値に空白文字が含まれる場合は、以下のように中括弧で囲む必要があります。

id=ImageMagick
class=PseudoClass  colors=256  matte=False
columns=1280  rows=1024  depth=8
compression=RLE
colorspace=RGB
copyright={© 1999-2017 ImageMagick Studio LLC}
⋮

`key = value`の組み合わせは、改行またはスペースで区切ることができ、ヘッダー内では任意の順序で出現する可能性があります。コメント(中括弧内)は、コロンの前にどこにでも表示できます。

ヘッダーでmontageキーを指定する場合は、ヘッダーの後にイメージタイルのディレクトリを続けます。このディレクトリは、改行文字で区切られた合成画像の各タイルの名前で構成されています。リストはNULL文字で終了します。

ヘッダーでcolor-profileキーを指定する場合は、ヘッダー(またはmontageキーがヘッダーにある場合はmontageディレクトリ)の後にバイナリカラープロファイルを続けます。

ヘッダーは、:文字の直後に改行文字が続くことで、イメージデータから区切られています。

MIFF バイナリデータ

次に、バイナリイメージデータ自体が続きます。イメージデータの形式は、ヘッダーのclassキーの値によって指定(または指定されない)画像のクラスによって異なります。

DirectClass画像は、colorspaceキーで定義されているRGB(赤、緑、青)、RGBA(赤、緑、青、アルファ)、CMYK(シアン、イエロー、マゼンタ、ブラック)、またはCMYKA(シアン、イエロー、マゼンタ、ブラック、アルファ)強度値として格納された連続階調画像です。各強度値は、深度8(0..255)の画像の場合は1バイトの長さ、深度16(0..65535)の場合は2バイトの長さ、深度32(0..4294967295)の画像の場合は最上位バイトが先頭の順序で4バイトの長さになります。

PseudoClass画像は、カラーマップされたRGB画像です。カラーマップは、一連の赤、緑、青のピクセル値として格納され、各値は1バイトのサイズです。画像の深度が16の場合、各カラーマップエントリは、最上位バイトが先頭の2バイトを消費します。カラーマップエントリ数は、colorsキーで定義されています。カラーマップデータは、ヘッダー(またはmontageキーがヘッダーにある場合はイメージディレクトリ)の直後に発生します。PseudoClassイメージデータは、カラーマップへのインデックス値の配列です。画像の色数が256色以下の場合、イメージデータの各バイトにはインデックス値が含まれています。画像の色数が256色を超える場合、または画像の深度が16の場合、インデックス値は最上位バイトが先頭の2バイトの連続したバイトとして格納されます。matteがtrueの場合、各カラーマップインデックスの後に1バイトまたは2バイトのアルファ値が続きます。

MIFFファイル内のイメージピクセルデータは、非圧縮、ランレングスエンコード、Zip圧縮、またはBZip圧縮されている場合があります。ヘッダーのcompressionキーは、イメージデータの圧縮方法を定義します。非圧縮ピクセルは、行順で1スキャンラインずつ格納されます。ランレングスエンコード圧縮は、同一の隣接するピクセルの連続をカウントし、ピクセルの後に長さバイト(同一ピクセル数マイナス1)を格納します。ZipおよびBZip圧縮は、画像の各行を圧縮し、圧縮されたピクセルバイトの長さを最上位バイトが先頭の順序のワードとして前に付けます。

MIFFファイルには複数の画像を含めることができます。個々の画像(ヘッダーとイメージデータで構成される)を1つのファイルに連結するだけです。