PHP Conference Japan 2024

ImagickPixel::getColorValue

(PECL imagick 2, PECL imagick 3)

ImagickPixel::getColorValue取得指定顏色通道的正規化值

說明

public ImagickPixel::getColorValue(int $color): float

擷取指定顏色通道的值,以 0 到 1 之間的浮點數表示。

參數

color

要取得其值的顏色,指定為 Imagick 顏色常數之一。可以是 RGB 顏色、CMYK 顏色、alpha 和 opacity 之一,例如 (Imagick::COLOR_BLUE、Imagick::COLOR_MAGENTA)。

回傳值

通道的值,以正規化的浮點數表示,錯誤時拋出 ImagickPixelException。

範例

範例 #1 基本 Imagick::getColorValue() 用法

<?php

$color
= new ImagickPixel('rgba(90%, 20%, 20%, 0.75)');

echo
"Alpha 值為 ".$color->getColorValue(Imagick::COLOR_ALPHA).PHP_EOL;
echo
"".PHP_EOL;
echo
"紅色值為 ".$color->getColorValue(Imagick::COLOR_RED).PHP_EOL;
echo
"綠色值為 ".$color->getColorValue(Imagick::COLOR_GREEN).PHP_EOL;
echo
"藍色值為 ".$color->getColorValue(Imagick::COLOR_BLUE).PHP_EOL;
echo
"".PHP_EOL;
echo
"青色值為 ".$color->getColorValue(Imagick::COLOR_CYAN).PHP_EOL;
echo
"洋紅色值為 ".$color->getColorValue(Imagick::COLOR_MAGENTA).PHP_EOL;
echo
"黃色值為 ".$color->getColorValue(Imagick::COLOR_YELLOW).PHP_EOL;
echo
"黑色值為 ".$color->getColorValue(Imagick::COLOR_BLACK).PHP_EOL;

?>

上述範例將輸出

Alpha value is 0.74999618524453

Red value is 0.90000762951095
Green value is 0.2
Blue value is 0.2

Cyan value is 0.90000762951095
Magenta value is 0.2
Yellow value is 0.2
Black value is 0

新增註釋

使用者貢獻的註釋 3 則註釋

匿名
4 年前
COLOR_ALPHA - 非完全透明像素
COLOR_OPACITY - 完全透明像素
holdoffhunger at gmail dot com
12 年前
使用 getColorValue 取得顏色值時,您可以自由使用任何配色方案:紅/綠/藍 (RGB) 方案或青/洋紅/黃/黑 (CMYK) 方案。對於 RGB,此函式適用於常數值 "COLOR_RED"、"COLOR_GREEN" 和 "COLOR_BLUE",而對於 CMYK,此函式適用於常數值 "COLOR_CYAN"、"COLOR_MAGENTA"、"COLOR_YELLOW" 和 "COLOR_BLACK"。作為程式設計師,您可能主要想問自己的問題是「我如何知道一個像素的顏色是否與其他像素不同?」這似乎被定義為 RGB *或* CMYK 值的唯一組合。每組 RGB 值都有一組唯一的 CMYK 值,僅供具有相同 RGB 值的其他像素共用,因此 RGB 值為 1/0.5/0.5 將具有一組唯一的 CMYK 值,僅與其他具有完全相同 RGB 值的像素共用。

為什麼要用 CMYK?因為這是印刷的標準,或者引用 Imagick 網站的說法:「因此,對於印刷,我們使用四種彩色墨水:青色、洋紅色、黃色和黑色;並使用這些墨水定義影像,以形成 CMYK 色彩空間。」 作為「色彩空間」,您可以在定義像素在一組像素中是否唯一時選擇使用 RGB 或 CMYK。但您可以完全自由地選擇 RGB 或 CMYK。 更多資訊請參考 Imagick 網站

https://imagemagick.dev.org.tw/Usage/color_basics/

一些演示兩種方法的程式碼:(適用於偏紫的紅色像素)

<?php

// Grab Pixel
// ---------------------------------------------------

$pixel_one = $imagick_type->getImagePixelColor(0,0);

// Grab Alpha/Opacity Values
// ---------------------------------------------------

$pixel_one_color_value_alpha = $pixel_one->getColorValue(imagick::COLOR_ALPHA);
$pixel_one_color_value_opacity = $pixel_one->getColorValue(imagick::COLOR_OPACITY);

// Grab Red/Green/Blue (RGB) Values
// ---------------------------------------------------

$pixel_one_color_value_red = $pixel_one->getColorValue(imagick::COLOR_RED);
$pixel_one_color_value_green = $pixel_one->getColorValue(imagick::COLOR_GREEN);
$pixel_one_color_value_blue = $pixel_one->getColorValue(imagick::COLOR_BLUE);

// Grab Cyna/Magenta/Yellow/blacK (CMYK) Values
// ---------------------------------------------------

$pixel_one_color_value_cyan = $pixel_one->getColorValue(imagick::COLOR_CYAN);
$pixel_one_color_value_magenta = $pixel_one->getColorValue(imagick::COLOR_MAGENTA);
$pixel_one_color_value_yellow = $pixel_one->getColorValue(imagick::COLOR_YELLOW);
$pixel_one_color_value_black = $pixel_one->getColorValue(imagick::COLOR_BLACK);

// Print Results
// ---------------------------------------------------

print("Alpha: $pixel_one_color_value_alpha<br>");
print(
"Opacity: $pixel_one_color_value_opacity<br><br>");

print(
"---------------------------------------------<br><br>");

print(
"Red: $pixel_one_color_value_red<br>");
print(
"Green: $pixel_one_color_value_green<br>");
print(
"Blue: $pixel_one_color_value_blue<br><br>");

print(
"Cyan: $pixel_one_color_value_cyan<br>");
print(
"Magenta: $pixel_one_color_value_magenta<br>");
print(
"Yellow: $pixel_one_color_value_yellow<br>");
print(
"Black: $pixel_one_color_value_black<br><br>");

/*
Example Results : : :
-----------------------

Alpha: 1
Opacity: 0

---------------------------------------------

Red: 1
Green: 0.501960784314
Blue: 0.501960784314

Cyan: 1
Magenta: 0.501960784314
Yellow: 0.501960784314
Black: 0

*/

?>
mwwaygoo AT hotmail DOT com
14 年前
引用:$color 要檢查的通道,指定為 Imagick 通道常數之一。

$color 是 COLOR_* 常數,而不是通道常數

例如:
<?php
$image
=new Imagick();
$image->readImage('test.png');
$point=$image->getImagePixelColor(0,0);
echo
' Alpha:'.$point->getColorValue(imagick::COLOR_ALPHA);
echo
' 不透明度:'.$point->getColorValue(imagick::COLOR_OPACITY);
echo
' 紅:'.$point->getColorValue(imagick::COLOR_RED);
echo
' 綠:'.$point->getColorValue(imagick::COLOR_GREEN);
echo
' 藍:'.$point->getColorValue(imagick::COLOR_BLUE);
?>
To Top