Color Modes

色彩管理

由于互联网上 sRGB 的标准化,大多数图像格式都使用 SRGB 作为默认的工作色彩空间。如果图像的色彩空间未知,并且它是 8 到 16 位的图像格式,假设它处于 sRGB 色彩空间是一个安全的选择。这也扩展到灰度。我们假设非线性灰度。如果特定图像格式包含色彩空间和/或伽马元数据,则会覆盖这些假设。如果色彩空间是 RGB 而不是 sRGB,ImageMagick 假设线性颜色。您还可以使用颜色配置文件或-set选项覆盖默认色彩空间假设。

ImageMagick 支持颜色配置文件,但是,对于没有配置文件或色彩空间声明的图像,ImageMagick 假设非线性 sRGB。大多数图像处理算法都假设线性色彩空间,因此在应用某些图像处理算法之前,将其转换为线性颜色或去除伽马函数可能是明智之举。例如,

magick myimage.jpg -colorspace RGB -resize 200% -colorspace sRGB mybigimage.jpg

要声明图像为线性 RGB 而不是 sRGB,您可以使用 set 选项

magick myimage.png -set colorspace RGB myRGBimage.png

请注意,将图像声明为线性与将图像转换为线性不同。声明它是线性仅设置元数据,不会更改像素数据。而转换为线性实际上会更改像素数据,如下文更详细地描述。

之后,输出文件的详细信息将色彩空间列为 RGB。这仅适用于包含区分线性 RGB 和非线性 sRGB 的元数据的图像类型,例如 PNG 和 GIF。因此,如果上述命令使用 JPG 或 TIF 输出格式运行,则色彩空间的详细信息仍显示 sRGB。为了使 JPG 输出正确地知道它是线性 RGB,请包含适当的颜色配置文件。

默认情况下,将彩色图像转换为灰度会返回非线性灰色。要改为转换为线性灰色,请使用-set-intensity-grayscale选项


convert myimage.png -colorspace LinearGray myRGBimage.png
convert myimage.png -colorspace RGB -colorspace Gray myRGBimage.png
convert myimage.png -intensity Rec709luminance -colorspace gray myRGBimage.png
convert myimage.png -grayscale Rec709luminance myRGBimage.png

请注意,LinearGray 是从 Imagemagick 6.9.9-29 和 7.0.7-17 开始的新功能。

分离通道时也需要相同的概念。通常,将 sRGB 彩色图像的每个通道分离转换为单独的非线性灰度图像。但是,如果希望将单独的通道保持为线性灰度,则可以应用相同的概念。例如,以下内容生成线性灰度通道。

magick myimage.png -colorspace RGB -separate myimage_channels_%d.png

在分离和重新组合通道时,可能存在中间处理,识别使用的色彩空间非常重要,尤其是在重新组合期间。例如,

magick myimage.png -separate myimage_channels_%d.png
magick myimage_channels_*.png -combine myimage2.png

在上面的示例中,分离的通道是非线性的,并且-combine的默认值是假设非线性通道。因此,结果与输入相同。

如果希望分离为线性灰度通道,稍后将它们重新组合回非线性颜色,也许在某些处理之后,然后使用与上面相同的概念来维护线性灰度

magick myimage.png -set colorspace RGB -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace RGB -combine -colorspace sRGB myimage2.png

在转换为另一个色彩空间并返回时,例如 sRGB 和 HSL 之间,以下两个命令处理非线性通道的第一种情况和线性通道的第二种情况

magick myimage.png -colorspace HSL -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace HSL -combine -colorspace sRGB myimage2.png
magick myimage.png -set colorspace RGB -colorspace HSL -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace HSL -combine -colorspace RGB -set colorspace sRGB myimage2.png

大多数图像格式都假设 sRGB 色彩空间(例如 JPEG、PNG 等)。一些仅支持线性 RGB(例如 EXR、DPX、CIN、HDR)或仅支持线性 GRAY。一些格式支持 CMYK。例如 JPG 支持,但 PNG 不支持。然后是偶尔支持 LAB(即 CieLAB)的格式(例如 TIFF、PSD、JPG、JP2)。有关更多信息,请参阅色彩空间支持的格式页面。

当将单个颜色指定为rgb(...)或十六进制时,这些颜色仍将被解释为非线性,即作为 sRGB 颜色。但是,如果要创建线性颜色,请使用icc-color(rgb,r,g,b)",其中rgb的范围为 0 到 1。请参阅颜色页面。