PHP Conference Japan 2024

Imagick::getImageChannelRange

(PECL imagick 2 >= 2.2.1, PECL imagick 3)

Imagick::getImageChannelRange取得通道範圍

描述

public Imagick::getImageChannelRange(int $channel): array

取得一個或多個影像通道的範圍。如果 Imagick 是針對 ImageMagick 6.4.0 或更新版本編譯的,則可以使用此方法。

參數

channel

提供任何適用於您的通道模式的通道常數。若要套用至多個通道,請使用位元運算子組合 通道常數。預設值為 Imagick::CHANNEL_DEFAULT。請參閱此通道常數列表

回傳值

傳回包含通道最小值和最大值的陣列。

錯誤/例外

發生錯誤時拋出 ImagickException。

新增註記

使用者貢獻註記 1 則註記

0
holdoffhunger at gmail dot com
12 年前
getImageChannelRange 會傳回一個陣列,其中包含兩個值,分別對應到鍵 'minima' 和 'maxima',它們只是此函式在其上執行的影像中特定通道的最小值和最大值。對於照片和高品質影像,這表示您幾乎總是會保證 minima 為 0,而 maxima 為允許的最大位元值。對於大多數影像來說,這是 65,535,也就是 2^16 的值(如果您從 0 開始計算),表示每個通道 16 位元的影像。這適用於所有通道。

但如果影像很簡單,您可能會獲得更好的範圍變化。對於一個簡單的紅色正方形影像,紅色通道的 maxima 和 minima 值都是 65,535 (max),而所有其他通道的 maxima 和 minima 值都是 0 (min)。如果您想知道任何通道可能回傳的最大值,請將預設通道饋送到此函式。

對於您的正常通道,您將會有類似 "imagick::CHANNEL_RED" 的內容,但您可能會有一些不常見的通道,例如 "imagick::CHANNEL_OPACITY"。對於顏色,您有 "_VALUE" 選項:紅色、灰色、青色、綠色、洋紅色、藍色、黃色、全部和預設。對於不常見的通道,您有 "_VALUE" 選項:未定義、alpha、opacity、matte、黑色和索引。使用此函式,不常見的通道總是產生 1.0E+37 (10^37) 的 minima 和 -1.0E-37 (-10^-37) 的 maxima,這沒有意義,因此請堅持使用我上面提到的顏色值。

此函式不適合您?沒問題。函式 getImageChannelExtrema 做的事情*完全*相同。唯一的區別在於您在不常見通道上收到的錯誤:它們的 minima 和 maxima,不是預設為瘋狂的值,而是簡單地預設為 0。

一般而言,此函式似乎具有告訴您影像可能有多簡單的實用性 -- 如果通道 maxima 和 minima 之間的差異非常小,則表示該給定通道的顏色沒有太多表達。這可能會告訴您影像是否是在某些簡單的繪圖程式中繪製的,還是實際的照片,但除此之外,您必須進行密集的程式設計才能使其計算出更複雜的東西。

現在,舉例說明一些僅限紅色影像的結果

ImageMagick - 通道範圍
通道 - '未定義':Minima:1.0E+37 Maxima:-1.0E-37
通道 - '紅色':Minima:65535 Maxima:65535
通道 - '灰色':Minima:65535 Maxima:65535
通道 - '青色':Minima:65535 Maxima:65535
通道 - '綠色':Minima:0 Maxima:0
通道 - '洋紅色':Minima:0 Maxima:0
通道 - '藍色':Minima:0 Maxima:0
通道 - '黃色':Minima:0 Maxima:0
通道 - 'Alpha':Minima:1.0E+37 Maxima:-1.0E-37
通道 - 'Opacity':Minima:1.0E+37 Maxima:-1.0E-37
通道 - 'Matte':Minima:1.0E+37 Maxima:-1.0E-37
通道 - '黑色':Minima:1.0E+37 Maxima:-1.0E-37
通道 - '索引':Minima:1.0E+37 Maxima:-1.0E-37
通道 - '全部':Minima:0 Maxima:65535
通道 - '預設':Minima:0 Maxima:65535
To Top