(PECL imagick 2, PECL imagick 3)
ImagickPixel::isSimilar — 检查此颜色与另一个颜色的距离
此函数当前没有文档;只有它的参数列表可用。
通过将此 ImagickPixel 对象和提供的对象的 RGB 值绘制在颜色立方体上,检查此 ImagickPixel 对象描述的颜色与提供的对象的颜色的距离。如果两个点之间的距离小于给定的模糊值,则颜色相似。已被弃用,建议使用 ImagickPixel::isPixelSimilar()。
color
要与之比较的 ImagickPixel 对象。
fuzz
将这些颜色视为相似的最大距离。此值的理论最大值为 3 的平方根 (1.732)。
成功时返回 true
。
示例 #1 ImagickPixel::isSimilar()
<?php
// 以下测试用例以 255 为最大距离进行编写
// 所以我们需要用 3 的平方根(单位立方体的对角线长度)对它们进行缩放。
$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>
颜色 1
</th>
<th>
颜色 2
</th>
<th>
测试距离 * 255
</th>
<th>
是否在距离内
</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 "测试距离失败。颜色 [$color1] 与颜色 [$color2] 的比较,不在距离 $testDistance 内,测试失败.".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 ? '是' : '否'
);
}
$output .= "</tbody></table>";
return $output;
?>