2024 年 PHP Conference Japan

ImagickPixel::isSimilar

(PECL imagick 2, PECL imagick 3)

ImagickPixel::isSimilar檢查此顏色與另一顏色之間的距離

說明

public ImagickPixel::isSimilar(ImagickPixel $color, float $fuzz): bool
警告

此函式目前沒有說明文件;僅提供其參數列表。

透過在色彩立方體上繪製 RGB 值,檢查此 ImagickPixel 物件描述的顏色與提供的物件之間的距離。如果兩點之間的距離小於給定的 fuzz 值,則顏色相似。已棄用,建議使用 ImagickPixel::isPixelSimilar()

參數

color

要與此物件比較的 ImagickPixel 物件。

fuzz

將這些顏色視為相似的最大距離。此值的理論最大值是根號三 (1.732)。

返回值

成功時返回 true

範例

範例 #1 ImagickPixel::isSimilar()

<?php
// The tests below are written with the maximum distance expressed as 255
// so we need to scale them by the square root of 3 - the diagonal length
// of a unit cube.
$root3 = 1.732050807568877;

$tests = array(
[
'rgb(245, 0, 0)', 'rgb(255, 0, 0)', 9 / $root3, false,],
[
'rgb(245, 0, 0)', 'rgb(255, 0, 0)', 10 / $root3, true,],
[
'rgb(0, 0, 0)', 'rgb(7, 7, 0)', 9 / $root3, false,],
[
'rgb(0, 0, 0)', 'rgb(7, 7, 0)', 10 / $root3, true,],
[
'rgba(0, 0, 0, 1)', 'rgba(7, 7, 0, 1)', 9 / $root3, false,],
[
'rgba(0, 0, 0, 1)', 'rgba(7, 7, 0, 1)', 10 / $root3, true,],
[
'rgb(128, 128, 128)', 'rgb(128, 128, 120)', 7 / $root3, false,],
[
'rgb(128, 128, 128)', 'rgb(128, 128, 120)', 8 / $root3, true,],
[
'rgb(0, 0, 0)', 'rgb(255, 255, 255)', 254.9, false,],
[
'rgb(0, 0, 0)', 'rgb(255, 255, 255)', 255, true,],
[
'rgb(255, 0, 0)', 'rgb(0, 255, 255)', 254.9, false,],
[
'rgb(255, 0, 0)', 'rgb(0, 255, 255)', 255, true,],
[
'black', 'rgba(0, 0, 0)', 0.0, true],
[
'black', 'rgba(10, 0, 0, 1.0)', 10.0 / $root3, true],);

$output = "<table width='100%' class='infoTable'><thead>
<tr>
<th>
Color 1
</th>
<th>
Color 2
</th>
<th>
Test distance * 255
</th>
<th>
Is within distance
</th>
</tr>
</thead>"
;

$output .= "<tbody>";

foreach (
$tests as $testInfo) {
$color1 = $testInfo[0];
$color2 = $testInfo[1];
$distance = $testInfo[2];
$expectation = $testInfo[3];
$testDistance = ($distance / 255.0);

$color1Pixel = new \ImagickPixel($color1);
$color2Pixel = new \ImagickPixel($color2);

$isSimilar = $color1Pixel->isPixelSimilar($color2Pixel, $testDistance);


if (
$isSimilar !== $expectation) {
echo
"Test distance failed. Color [$color1] compared to color [$color2] is not within distance $testDistance FAILED.".NL;
}

$layout = "<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td style='text-align: center;'>%s</td>
</tr>"
;

$output .= sprintf(
$layout,
$color1,
$color2,
$distance,
$isSimilar ? 'yes' : 'no'
);
}

$output .= "</tbody></table>";

return
$output;

?>

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top