ImagickPixel
PHP Manual

ImagickPixel::isSimilar

(PECL imagick 2.0.0)

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

Описание

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

К настоящему времени эта функция еще не была документирована; для ознакомления доступен только список аргументов.

Проверяется разница цвета, описанного текущим объектом 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;

?>


ImagickPixel
PHP Manual