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 之間。請參閱色彩頁面。