Color Modes - ImageMagick 圖像庫

Alpha 色彩合成

本頁說明用於定義如何在各種影像操作中合併兩張影像的「影像合成方法」。對於命令列 API,通常使用 -compose 設定選項進行設定。

合成說明使用抽象術語,以便使說明更精確,同時避免使用特定於特定建置組態的常數值。每個影像像素均由紅色、綠色和藍色級別表示(對於灰色像素,這些級別相等)。與建置相關的值 QuantumRange 是影像紅色、綠色或藍色通道中每個像素可以儲存的最大整數值。每個影像像素還可以選擇性地(如果啟用了影像遮罩通道)具有關聯的不透明度級別,範圍從 不透明透明,可用於確定在將像素與另一個影像像素合成時像素顏色的影響。如果停用了影像遮罩通道,則影像中的所有像素都將被視為不透明。不透明像素的顏色完全可見,而透明像素的顏色則完全不可見(忽略像素顏色)。

根據定義,點陣圖具有矩形形狀。所有影像行的長度都相等,所有影像列的長度也都相等。通過將 Alpha 通道視為可視的「遮罩」,可以通過將 Alpha 通道視為影像的「餅乾切割器」來賦予矩形影像「形狀」。這是通過將形狀內的像素設置為不透明,將形狀外的像素設置為透明來完成的。形狀邊界上的像素可以在不透明和透明之間,以提供消除鋸齒(視覺上平滑的邊緣)。合成運算符的說明使用這種影像「形狀」的概念,以便更容易理解運算符的說明。雖然根據「形狀」來描述運算符很方便,但它們絕不僅限於遮罩樣式操作,因為它們基於連續浮點數學,而不是簡單的布林運算。

可以使用以下 Alpha 混合(Duff-Porter)合成方法

方法 說明
clear 目標的顏色和 Alpha 都會被清除。來源和目標均未使用(除了始終保留的目標大小和其他中繼資料)。
src 來源會被複製到目標。目標不會被用作輸入,但會被清除。
dst 目標保持不變。來源影像將被完全忽略。
src-over 來源會被合成在目標之上。這是預設的 Alpha 混合合成方法,當未設定合成設定且未在影像中繼資料中設定時,就會使用此方法。
dst-over 目標會被合成在來源之上,結果將取代目標。
src-in 來源中位於目標內部的部分將取代目標。
dst-in 目標中位於來源內部的部分將取代目標。未重疊的區域將被清除。
src-out 來源中位於目標外部的部分將取代目標。
dst-out 目標中位於來源外部的部分將取代目標。
src-atop 來源中位於目標內部的部分將被合成到目標上。
dst-atop 目標中位於來源內部的部分將被合成在來源之上,並取代目標。未重疊的區域將被清除。
xor 來源圖像位於目標圖像外部的部分會與目標圖像位於來源圖像外部的部分組合。來源或目標,但不能同時使用。

任何「Src-*」方法也可以在不含「Src-」部分的情況下指定。例如,預設的合成方法可以僅指定為「Over」。

這些合成方法中的許多方法都會清除未被來源圖像覆蓋的目標圖像。這是預期結果,作為該特定合成方法定義的一部分。您可以透過將特殊 -define「compose:outside-overlay」設定為值「false」來停用此行為,這將關閉此行為。

除了上述 12 種 Duff-Porter Alpha 合成方法之外,還提供了一種特殊的相關方法「Copy」。這相當於使用「Src」並將特殊的 -define 選項「compose:outside-overlay」設定為「false」,以便僅修改重疊區域,而不會清除重疊區域之外的圖像其餘部分。

以下數學合成方法也可用。

方法 說明
multiply(乘法) 來源顏色會與目標顏色相乘,並替換目標顏色。結果顏色始終至少與兩種成份顏色中較暗的一種顏色一樣暗。任何顏色與黑色相乘都會產生黑色。任何顏色與白色相乘都會保持原始顏色不變。
screen(濾色) 來源顏色和目標顏色會先進行反相,然後相乘,最後替換目標顏色。結果顏色始終至少與兩種成份顏色中較亮的一種顏色一樣亮。任何顏色與白色濾色都會產生白色。任何顏色與黑色濾色都會保持原始顏色不變。
plus(加) 來源顏色會加到目標顏色上,並替換目標顏色。此運算子適用於平均或控制兩個圖像的合併,而不是直接覆蓋。
add(相加) 與「plus」相同,但透明度數據會被視為遮罩值。因此,任何一個圖像中的透明區域都會保持透明。
minus(減) 從目標圖像中減去來源圖像中的顏色。涉及透明度時,不透明區域會從任何目標不透明區域中減去。
subtract(相減) 從目標圖像中減去來源圖像中的顏色。涉及透明度時,會減去透明區域,因此只有來源中的不透明區域在目標圖像中保持不透明。
difference(差異) 從較亮的顏色中減去兩種成份顏色中較暗的一種。使用白色繪製會反轉目標顏色。使用黑色繪製不會產生任何變化。
exclusion(排除) 產生類似於「difference」的效果,但看起來對比度較低。使用白色繪製會反轉目標顏色。使用黑色繪製不會產生任何變化。
darken(變暗) 選擇目標顏色和來源顏色中較暗的一種。當來源顏色較暗時,目標顏色會被替換為來源顏色,否則保持不變。
lighten(變亮) 選擇目標顏色和來源顏色中較亮的一種。當來源顏色較亮時,目標顏色會被替換為來源顏色,否則保持不變。
negate(反相) 「difference」模式的「相反」模式。請注意,它不是反轉的 difference 模式,因為黑色和白色會返回相同的結果,但介於兩者之間的顏色會變亮而不是變暗。
reflect(反射) 此模式在將閃亮的物件或光區添加到圖像時很有用。公式類似於顏色減淡,但在大多數情況下,結果並不會那麼亮。結果看起來有點像柔光。
freeze(凍結) reflect 模式的另一種變體(基色和混合顏色反轉,結果再次反轉)。
stamp(印記) 此模式在某種程度上類似於平均模式。將浮雕或凹凸紋理應用於圖像時,此模式很有幫助。
interpolate(插值) 此模式以某種方式結合了 multiply 和 screen 模式(對於非常暗或非常亮的顏色看起來非常相似)。

通常,當涉及透明度時,除了使用「加法」 Alpha 合成的「加法」之外,這些方法都使用默認的「覆蓋」 Alpha 合成。這意味著兩個圖像的 Alpha 通道僅用於確保任何可見輸入即使在未覆蓋的部分中也保持可見。這也意味著任何值都由輸入和輸出圖像的 Alpha 通道加權。這種「覆蓋」 Alpha 合成也適用於以下的照明合成方法。

數學合成根據 -channel 的定義,在單個通道的基礎上應用。這包括 Alpha 通道。這種特殊用法允許您對圖像通道執行真正的數學運算,而不會涉及 Alpha 合成效果。

使用 -define compose:sync=false,上述數學合成將不再與 Alpha 通道同步其操作。相反,數學合成根據 -channel 的定義,在單個通道的基礎上應用。這包括 Alpha 通道。這種特殊用法允許您對圖像通道執行真正的數學運算,而不會涉及 Alpha 合成效果。

即使與數學合成方法密切相關,此定義也不適用於照明合成方法(見下文)。

以下照明合成方法也可用。

方法 說明
線性加亮 這等同於「加法」,因為顏色通道只是簡單地相加,但是它不會對 Alpha 通道進行「加法」運算,而是使用普通的「覆蓋」 Alpha 合成,其中涉及透明度。產生一種類似於加法乘法的結果。
線性加深 與「線性加亮」相同,但也從結果中減去 1。類似於圖像的加法「濾色」。
顏色加亮 使目標顏色變亮以反映來源顏色。使用黑色繪製不會產生任何變化。
顏色加深 使目標顏色變暗以反映來源顏色。使用白色繪製不會產生任何變化。
疊加 根據目標顏色,對顏色進行乘法或濾色。來源顏色疊加在目標上,同時保留其高光和陰影。目標顏色不會被替換,而是與來源顏色混合以反映目標的明暗程度。
強光 根據來源顏色值,對顏色進行乘法或濾色。如果來源顏色比 0.5 亮,則目標會變亮,就像被濾色一樣。如果來源顏色比 0.5 暗,則目標會變暗,就像被乘以一樣。變亮或變暗的程度與來源顏色和 0.5 之差成正比。如果等於 0.5,則目標保持不變。使用純黑色或白色繪製會產生黑色或白色。
線性光 類似於「強光」,但使用線性加亮和線性加深來代替。稍微增加對比度,並對前景的色調值產生影響。
柔光加深 顏色加深和反相顏色加亮模式的組合,但比這兩種模式都更加平滑。基礎圖像會稍微變亮,但非常暗的混合顏色會被「加深」。
柔光加亮 顏色加亮和反相顏色加深模式的組合,但比這兩種模式都更加平滑。基礎圖像會稍微變暗,但非常亮的混合顏色會被「加亮」。
柔光 根據來源顏色值,使顏色變暗或變亮。如果來源顏色比 0.5 亮,則目標會變亮。如果來源顏色比 0.5 暗,則目標會變暗,就像被加深一樣。變暗或變亮的程度與來源顏色和 0.5 之差成正比。如果等於 0.5,則目標保持不變。使用純黑色或白色繪製會產生明顯較暗或較亮的區域,但不會產生純黑色或白色。
帳篷光 幾乎等同於「柔光」,但使用的是連續的數學公式,而不是兩個有條件選擇的公式。
亮光 一種修改過的「線性光」,旨在保留圖像中非常強烈的原色和二次色。
點光 類似於「強光」,但使用銳利的線性陰影,以模擬強「針孔」光源的效果。

還包括以下這些特殊用途的合成方法

方法 說明
複製 這相當於 Duff-Porter 合成方法「Src,」,但不會清除未被覆蓋的目標圖像部分。
複製-* 將來源圖像中指定的通道(紅色、綠色、藍色、青色、洋紅色、黃色、黑色或透明度)複製到目標圖像中的相同通道。如果來源圖像中不存在指定的通道(這只會發生在方法「copy-opacity」或「copy-black」中),則假設來源圖像是要複製的值的特殊灰階通道圖像。
更改遮罩 將與來源圖像像素相似的任何目標像素(由目前的 -fuzz 因數定義)替換為透明。
立體 建立立體浮雕

除了這些合成方法之外,還有一些特殊的方法,它們不僅需要合併或疊加的兩個圖像,還需要一些額外的數值參數,如下表所示。

在「composite」命令中,使用帶有所需參數的特殊選項來選擇這些合成方法。它們通常(但不總是)與它們使用的合成「方法」同名,並取代「composite」命令中 -compose 設定的正常用法。例如...

composite ... -blend 50x50 ...  

magick」命令可以使用 -define 屬性 compose:args 接受這些傳遞給其 -composite 運算符的額外參數。這意味著您現在可以使用這些特殊的增強型 -compose 方法,這些方法的參數和方法都需要單獨設定。例如...

magick ... -compose blend  -define compose:args=50,50 -composite ...  

下表列出了這些特殊的「帶參數」合成方法,並簡要概述了它們的功能。如需更多詳細資訊,請參閱等效的「composite」命令選項名稱。

方法 說明
溶解 參數:src_percent[xdst_percent]
等同於「composite-dissolve。按給定的百分比溶解「來源」圖像,然後將其疊加在「目標」圖像「上方」。如果 src_percent 大於 100,則開始溶解主圖像,使其在值為 200 時變為透明。如果給出了兩個百分比,則每個圖像都將溶解到給定的百分比。
混合 參數:src_percent[xdst_percent]
等同於「composite-blend。根據給定的百分比和每個像素的透明度對圖像進行平均(「加」)。如果只給出一個百分比值,則設定合成圖像或「來源」圖像的權重,而背景圖像的權重則設定為完全相反的數量。也就是說,-blend 30 會將 30% 的「來源」圖像與 70% 的「目標」圖像合併。因此,它等同於 -blend 30x70
數學 參數:A, B, C, D
目前在「composite」中不可用。根據以下公式合併來源圖像和目標圖像
    A*Sc*Dc + B*Sc + C*Dc + D
可用於生成自訂合成方法,否則需要使用速度較慢的 -fx DIY 圖像運算符來實作。
調整 參數:brightness[xsaturation]
等同於 "composite" 的 -watermark。採用一張灰階圖像(帶有 Alpha 遮罩),並根據浮水印圖像的灰階值和 brightness 百分比修改目標圖像的亮度。目標的色彩飽和度屬性僅由 saturation 百分比直接修改,預設為 100%(無顏色變化)。
displace(位移) 參數:X-scale[xY-scale][!][%]
等同於 "composite" 的 -displace。使用此選項時,「覆蓋」圖像(以及可選的「遮罩」圖像)將用作相對位移映射,用於根據覆蓋區域的每個點處看到的目標圖像部分來位移查找。就像位移映射是一個「透鏡」,扭曲了其背後的原始「背景」圖像。

X 軸縮放比例由覆蓋圖像的「紅色」通道調製,而 Y 軸縮放比例由綠色通道調製(如果給定遮罩圖像,則將其合併到覆蓋圖像的綠色通道中。這種分離允許您分別調製 X 和 Y 查找位移,從而實現二維位移,而不是一維向量位移(使用灰階圖像)。

如果覆蓋圖像包含透明度,則將其用作結果圖像的遮罩,以移除「無效」像素。

'%' 標誌使位移比例相對於覆蓋圖像的大小(100% = 圖像寬度/高度的一半)。使用 '!' 會切換百分比參數,以改為參考目標圖像大小。

distort(扭曲) 參數:X-scale[xY-scale[+X-center+Y-center]][!][%]
目前在 "composite" 中不可用。與「Displace」(上文)完全相同,但使用相對於覆蓋中心(或給定中心)的絕對坐標。基本上,您可以生成絕對扭曲映射,其中「黑色」將根據給定的比例查找目標圖像的左/上邊緣,而「白色」將查找右/下邊緣。

'!' 標誌不僅會切換百分比縮放以使用目標圖像,還會切換查找的圖像中心偏移。這表示覆蓋可以查找目標圖像的完全不同的區域。

blur(模糊) 參數:Width[xHeight[+Angle][+Angle2]]
等同於 "composite" 的 -blur。一種可變模糊映射合成方法,其中覆蓋區域中的每個像素都替換為橢圓加權平均值 (EWA),橢圓(通常為圓形)的 sigma 大小根據覆蓋(源圖像)灰階映射進行縮放。

與「Displace」和「Distort」一樣,紅色通道將調製橢圓的寬度,而綠色通道將調製橢圓的高度。如果在參數中給定單個角度值,則橢圓將旋轉指定的角度。

通常,映射覆蓋圖像的藍色通道會被忽略。但是,如果給定了第二個橢圓角度,則假設藍色通道定義了橢圓的可變角度,範圍從第一個角度到第二個角度。這允許生成徑向模糊,或旋轉模糊的粗略近似值。或者兩者的任意組合。

seamless-blend(無縫混合) 參數:max-iterationsxdistortion

將覆蓋圖像無縫插入背景圖像。此運算符需要遮罩。在將前景物件無縫混合到背景圖像時,設定最大迭代次數和扭曲程度。扭曲是每次迭代之間的均方根誤差 (RMSE),一個好的開始可能是 300x0.0001。請注意,啟用 HDRI 功能時,無縫混合效果最佳。

saliency-blend(顯著性混合) 參數:max-iterationsxdistortion

合併疊加影像與背景影像,使在給定像素處最顯著(具有最多細節)的影像顯示在結果中。此運算子需要遮罩。設定將前景物件無縫混合到背景影像時的迭代次數上限和失真度。失真度是每次迭代的均方根誤差,良好的起點可能是 300x0.0001。請注意,啟用 HDRI 功能時,無縫混合效果最佳。顯著性混合會比無縫混合稍慢。

要列印所有可用合成運算子的完整清單,請使用 -list compose