Color Modes

Magick 图像文件格式

MIFF 头部MIFF 二进制数据

Magick 图像文件格式 (MIFF) 是 ImageMagick 自身的平台无关格式,用于存储位图图像。与其他图像格式相比,它具有一定的优势,因为它存储了 ImageMagick 已知的所有元数据(例如图像颜色配置文件、注释、作者、版权等),而其他格式可能只支持一小部分可用元数据或根本不支持。MIFF 图像文件由两部分组成。第一部分是头部,由以文本形式描述图像的键组成。下一部分是二进制图像数据。下面我们将详细讨论这些部分。

MIFF 头部

MIFF 头部完全由 ISO-8859-1 字符组成。头部中的字段是以 key = value 格式的键值对组合,每个键和值之间用等号 (=) 分隔。每个 key = value 组合至少用一个控制字符或空格字符分隔。注释可以出现在头部部分,并且始终用大括号分隔。MIFF 头部始终以冒号 (:) 字符结尾,后跟一个 ctrl-Z 字符。在冒号之前加上 换页符换行符 也很常见。在使用 more Linux 程序时,换页符 可以防止列出二进制数据,而 ctrl-Z 在 Windows 命令行上与 type 命令具有相同的效果。

以下是通常在 MIFF 文件中找到的 key = value 组合的部分列表

background-color = 颜色
border-color = 颜色
matte-color = 颜色 这些可选键分别反映了图像背景、边框和蒙版颜色。一个 颜色 可以是名称(例如白色)或十六进制值(例如 #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 = 国际色彩联盟颜色配置文件中的字节数。该配置文件由位于 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}
⋮

请注意,key = value 组合可以用 换行符 或空格分隔,并且可以在头部内的任何顺序出现。注释(在大括号内)可以出现在冒号之前的任何位置。

如果在头部中指定了 montage 键,请在头部后面跟随一个图像图块目录。此目录由复合图像的每个图块的名称组成,这些名称用 换行符 字符分隔。列表以 NULL 字符结尾。

如果在头部中指定了 color-profile 键,请在头部(或 montage 键在头部中的情况下为 montage 目录)后面跟随二进制颜色配置文件。

头部与图像数据之间用 : 字符分隔,后面紧跟一个 换行符

MIFF 二进制数据

接下来是二进制图像数据本身。图像数据的格式取决于图像的类别,该类别由头部中 class 键的值(或未指定)指定。

DirectClass 图像是连续色调图像,存储为 RGB(红、绿、蓝)、RGBA(红、绿、蓝、alpha)、CMYK(青、黄、品红、黑)或 CMYKA(青、黄、品红、黑、alpha)强度值,如 colorspace 键定义。对于深度为 8(0..255)的图像,每个强度值长度为 1 个字节;对于深度为 16(0..65535)的图像,长度为 2 个字节;而深度为 32(0..4294967295)的图像,则大多数情况下需要 4 个字节,且最高有效字节优先。

PseudoClass 图像是颜色映射的 RGB 图像。颜色映射表存储为一系列红色、绿色和蓝色像素值,每个值的大小为 1 个字节。如果图像深度为 16,则每个颜色映射表条目占用 2 个字节,最高有效字节优先。颜色映射表条目的数量由 colors 键定义。颜色映射表数据紧随头部(或图像目录,如果 montage 键在头部中)之后。PseudoClass 图像数据是颜色映射表中索引值的数组。如果图像中只有 256 种或更少的颜色,则图像数据的每个字节都包含一个索引值。如果图像包含超过 256 种颜色或图像深度为 16,则索引值将存储为两个连续的字节,最高有效字节优先。如果 matte 为 true,则每个颜色映射索引后面都会跟着一个 1 或 2 字节的 alpha 值。

MIFF 文件中的图像像素数据可以是未压缩的、行程长度编码的、Zip 压缩的或 BZip 压缩的。头部中的 compression 键定义了图像数据是如何压缩的。未压缩的像素按行顺序逐行存储。行程长度编码压缩计算相同相邻像素的行程,并存储像素后跟一个长度字节(相同像素的数量减 1)。Zip 和 BZip 压缩压缩图像的每一行,并在压缩行之前以最高有效字节优先的顺序将压缩像素字节的长度作为字存储。

MIFF 文件可以包含多个图像。只需将每个单独的图像(由头部和图像数据组成)连接到一个文件中即可。