ImagickPixel::isSimilar

(PECL imagick 2.0.0)

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

説明

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)',   $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>
                    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;

?>