Php/docs/imagickpixel.issimilar

提供:Dev Guides
< Php
移動先:案内検索

ImagickPixel::isSimilar

(PECL imagick 2, PECL imagick 3)

ImagickPixel::isSimilarこの色と別の色の差を調べる


説明


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

警告 この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。


この ImagickPixel オブジェクトと別のオブジェクトの色の差を調べます。 これは、両者の RGB 値を色立方体上にプロットすることで行います。 ふたつの色の差が fuzz で指定した値よりも小さければ、 同じ色であるとみなされます。 非推奨です。かわりに ImagickPixel::isPixelSimilar() を使いましょう。


パラメータ

color
このオブジェクトと比較したい ImagickPixel オブジェクト。
fuzz
同じ色であるとみなす最大の誤差。 理論上の最大値は、3 の平方根 (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;?>