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)',   $root3,         false,],
            [
'rgb(245, 0, 0)',      'rgb(255, 0, 0)',  10 $root3,         true,],
            [
'rgb(0, 0, 0)',        'rgb(7, 7, 0)',     $root3,         false,],
            [
'rgb(0, 0, 0)',        'rgb(7, 7, 0)',    10 $root3,         true,],
            [
'rgba(0, 0, 0, 1)',    'rgba(7, 7, 0, 1)'$root3,         false,],
            [
'rgba(0, 0, 0, 1)',    'rgba(7, 7, 0, 1)',    10 $root3,     true,],
            [
'rgb(128, 128, 128)',  'rgb(128, 128, 120)',   $root3,     false,],
            [
'rgb(128, 128, 128)',  'rgb(128, 128, 120)',   $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;

?>