PHP Conference Nagoya 2025

ImagickPixel::isSimilar

(PECL imagick 2, PECL imagick 3)

ImagickPixel::isSimilarПроверить разницу между этим цветом и другим

Описание

public ImagickPixel::isSimilar(ImagickPixel $color, float $fuzz): bool
Внимание

Функцию пока не задокументировали; для знакомства доступен только список аргументов.

Проверяется разница цвета, описанного текущим объектом ImagickPixel и цвета в переданном объекте, путём построения их RGB значений в цветовом кубе. Если разница между ними меньше чем переданное fuzz-значение, то цвета считаются одинаковыми. Устарел в пользу ImagickPixel::isPixelSimilar().

Список параметров

color

Объект ImagickPixel для сравнения с текущим объектом.

fuzz

Максимальная разница, при которой цвета будут считаться одинаковыми. Теоретическим максимумом для этого значения можно считать квадратный корень из трёх (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>
Color 1
</th>
<th>
Color 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;

?>

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top