Color Modes

Magick 影像檔案格式

MIFF 標頭MIFF 二進制數據

Magick 影像檔案格式 (MIFF) 是 ImageMagick 自己平台無關的用於儲存點陣圖圖像的格式。它相較於其他圖像格式的優勢在於它儲存了 ImageMagick 已知的所有中繼數據(例如:圖像顏色配置文件、註釋、作者、版權等),而其他格式可能只支援一小部分可用的中繼數據,甚至完全不支援。MIFF 圖像檔案由兩個部分組成。第一部分是由以文字形式描述圖像的關鍵字組成的標頭。下一部分是二進制圖像數據。我們將在下面詳細討論這些部分。

MIFF 標頭

MIFF 標頭完全由 ISO-8859-1 字元組成。標頭中的欄位是以 key = value 格式的鍵值組合,每個鍵和值之間用等號 (=) 分隔。每個 key = value 組合至少用一個控制字元或空白字元分隔。註釋可能會出現在標頭部分,並且始終用大括號括起來。MIFF 標頭始終以冒號 (:) 字元結尾,後面跟著一個 ctrl-Z 字元。在冒號後面加上一個 分頁符 和一個 換行符 也很常見。分頁符 可以防止在使用 Linux 程式 more 時列出二進制數據,而 ctrl-Z 在 Windows 命令列中使用 type 命令時具有相同的效果。

以下是在 MIFF 檔案中通常會找到的 key = value 組合的部分清單

background-color = color
border-color = color
matte-color = color 這些可選的關鍵字分別反映了圖像的背景、邊框和遮罩顏色。顏色 可以是名稱(例如:白色)或十六進制值(例如:#ccc)。
class = { DirectClass, PseudoClass } 儲存在 MIFF 檔案中的二進制像素數據的類型。如果沒有這個關鍵字,則假設為 DirectClass 像素數據。
colors = value DirectClass 圖像中的顏色數量。對於 PseudoClass 圖像,這個關鍵字指定了顏色表中的條目數量。如果標頭中沒有這個關鍵字,並且圖像是 PseudoClass,則假設為線性 256 色灰階顏色表。顏色表條目的最大數量為 65536 個。
colorspace = { RGB, CMYK, ... } 像素數據的色彩空間。預設值為 RGB。
columns = value 圖像的寬度(以像素為單位)。這是一個必需的關鍵字,沒有預設值。
compression = {BZip, None, Zip, ... } 用於壓縮圖像數據的演算法類型。如果沒有這個關鍵字,則假設像素數據未經壓縮。
delay = microseconds 圖像序列中幀之間的延遲(以微秒為單位)。
depth = { 8, 16, 32 } 表示從 0 到 255(深度 8)、0 到 65535(深度 16)或 0 到 4294967295(深度 32)的單一顏色值的深度。如果沒有這個關鍵字,則假設深度為 8。
dispose = value 圖層處置方法。以下是有效值
    0. 未指定處置方式。
    1. 不要處置幀之間的內容。
    2. 使用標頭中的背景顏色覆蓋幀。
    3. 使用上一幀覆蓋。
gamma = value 圖像的伽瑪值。如果未指定,則假設伽瑪值為 1.0(線性亮度響應)。
id=ImageMagick 識別檔案為 MIFF 格式影像檔。此鍵值為必要項,必須為第一個鍵值對,只能出現一次,且沒有預設值。雖然此鍵值可以出現在標頭中的任何位置,但它應該從標頭的第一列第一個鍵值開始。這將允許像 file(1) 之類的程式輕鬆地將檔案識別為 MIFF。
iterations = 影像序列停止前循環的次數。
label = { 字串 } 定義影像的簡短標題或說明。如果標籤中出現任何空格,則必須將其括在大括號內。
matte = { True, False } 指定影像是否具有遮罩資料。遮罩資料通常用於影像合成。
montage = <寬度>x<高度>[+-]<x 位移>[+-]<y 位移> 合成影像中各個拼貼的大小和位置。當影像是由多個不同拼貼組成時,請使用此鍵值。拼貼由影像和可選的邊框和標籤組成。寬度 是每個拼貼在水平方向上的像素大小,高度 是垂直方向上的像素大小。每個拼貼的寬度和高度必須具有相同數量的像素。但是,寬度可以與高度不同。x 位移 是從合成影像垂直邊緣到一行中第一個拼貼開始處的像素偏移量,y 位移 是從水平邊緣到一列中第一個拼貼開始處的像素偏移量。如果指定了此鍵值,則影像標頭後必須跟隨拼貼名稱的目錄。目錄的格式將在下方說明。
page = 影像畫布的首選大小和位置。
profile-icc = 國際色彩聯盟色彩描述檔中的位元組數。描述檔由位於 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 } 渲染意圖是由國際色彩聯盟 (http://www.color.org) 定義的 CSS-1 屬性。
resolution = <x 解析度>x<y 解析度> 影像的垂直和水平解析度。有關特定的解析度單位(例如,每英吋像素數),請參閱單位。
rows = 影像的高度(以像素為單位)。這是必要鍵值,沒有預設值。
scene = 此 MIFF 影像檔的序列號。當 MIFF 影像檔是動畫中使用的一系列檔案中的一個時,此可選鍵值非常有用。
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}
⋮

請注意,鍵值 = 值 組合可以用 換行符號 或空格分隔,並且可以在標頭中以任何順序出現。註釋(在大括號內)可以出現在冒號之前的任何位置。

如果在標頭中指定了 montage 鍵值,則標頭後應跟隨影像拼貼的目錄。此目錄由合成影像中每個拼貼的名稱組成,並以 換行符號 分隔。清單以 NULL 字元終止。

如果在標頭中指定了 color-profile 鍵值,則標頭(如果標頭中存在 montage 鍵值,則為 montage 目錄)後應跟隨二進制色彩描述檔。

標頭與影像資料之間以 : 字元分隔,後面緊跟著一個 換行符號

MIFF 二進制資料

接下來是二進制圖像數據本身。圖像數據的格式取決於圖像的類別,如標題中類別鍵的值所指定(或未指定)。

DirectClass 圖像是連續色調圖像,以 RGB(紅、綠、藍)、RGBA(紅、綠、藍、透明度)、CMYK(青色、黃色、品紅色、黑色)或 CMYKA(青色、黃色、品紅色、黑色、透明度)強度值存儲,具體取決於色彩空間鍵的定義。對於深度為 8(0..255)的圖像,每個強度值長度為一個字節;對於深度為 16(0..65535)的圖像,每個強度值長度為兩個字節;對於深度為 32(0..4294967295)的圖像,每個強度值長度為四個字節,採用最高有效字節優先順序。

PseudoClass 圖像是經過顏色映射的 RGB 圖像。顏色映射存儲為一系列紅色、綠色和藍色像素值,每個值的大小為一個字節。如果圖像深度為 16,則每個顏色映射條目佔用兩個字節,最高有效字節優先。顏色映射條目的數量由顏色鍵定義。顏色映射數據緊跟在標題(如果標題中存在蒙太奇鍵,則緊跟在圖像目錄)之後。PseudoClass 圖像數據是一個指向顏色映射的索引值數組。如果圖像中的顏色數量少於或等於 256 種,則圖像數據的每個字節都包含一個索引值。如果圖像包含超過 256 種顏色或圖像深度為 16,則索引值存儲為兩個連續的字節,最高有效字節優先。如果 matte 為 true,則每個顏色映射索引後面都跟隨一個 1 或 2 字節的透明度值。

MIFF 文件中的圖像像素數據可以是未壓縮的、行程編碼的、Zip 壓縮的或 BZip 壓縮的。標題中的壓縮鍵定義了圖像數據的壓縮方式。未壓縮的像素按行順序逐行存儲。行程編碼壓縮計算相鄰相同像素的行程,並在像素後面存儲一個長度字節(相同像素的數量減 1)。Zip 和 BZip 壓縮會壓縮圖像的每一行,並在壓縮行之前加上壓縮像素字節的長度,作為一個字,採用最高有效字節優先順序。

MIFF 文件可能包含多個圖像。只需將每個單獨的圖像(由標題和圖像數據組成)連接到一個文件中即可。