5

次のような画像の周りの白い領域をトリミングする機能があります

if(imagecolorat($img, $x, $top) != 0xFFFFFF) {
    //sets where the top part of the image is trimmed
}

問題は、一部の画像に時折、白に近いため目立たないほどの迷走ピクセルがあることですが、正確には 0xFFFFFF ではなく 0xFFFEFF か何かであるため、トリミングが台無しになります。上記のステートメントを書き直して、可能な値を明らかにテストせずに、0xFDFDFD までのほぼ白い画像に対して true と評価されるようにするにはどうすればよいでしょうか。

4

5 に答える 5

6
$color = imagecolorat($img, $x, $top);
$color = array(
    'red'   => ($color >> 16) & 0xFF,
    'green' => ($color >>  8) & 0xFF,
    'blue'  => ($color >>  0) & 0xFF,
);
if ($color['red']   >= 0xFD
 && $color['green'] >= 0xFD
 && $color['blue']  >= 0xFD) {
    //sets where the top part of the image is trimmed
}

使用される演算子の説明については、以下をお読みください。

于 2012-10-31T13:24:21.303 に答える
3

これらのオフホワイト色を正しく検出するには、RGB カラー座標からHSVに変換する必要があります。HSV では、すべてのオフホワイトの S が 0 に近く、V が 100 に近い (正規化)。この質問には、変換を行うための PHP コードを使用した回答があるため、そのコードを使用すると、次のようになります。

$rgb = imagecolorat($img, $x, $top);
$hsv = RBG_TO_HSV(($rgb >> 16) & 0xFF, ($rgb >> 8) & 0xFF, $rgb & 0xFF);
if ($hsv['S'] < .05 && $hsv['V'] > .95) {
    // color is off-white
}

定数.05を微調整して、.95必要に応じて基準を緩和または強化することができます。また、インタラクティブなカラー ピッカー (たとえば、このS) を使用して、とのさまざまな値に対して色がどれだけ白に近いかを把握することもできますV

于 2012-10-31T13:25:19.467 に答える
0

これを行う 1 つの方法を次に示します。色を RGB コンポーネントに分割して、最終的に0xfeになるようにし$color = 0xFFFEEFます。$red = 0xff; $green =$blue = 0xef'. 次に、各コンポーネントをしきい値と比較します。3 つすべてがしきい値内にある場合、それは「ほぼ白」です。したがって、関数は(疑似コード)のようになります。

function is_nearly_white($r, $g, $b) {
    $threshold = 0xfd;
    return ($r > $threshold && $g > $threshold && $b > $threshold);
}
于 2012-10-31T13:25:44.553 に答える
0

私はこれが仕事をするべきだと思います:

$range = 0xFFFFFF - 0xFFFEFF;

if((0xFFFEFF - imagecolorat($img, $x, $top)) < $range){
    // do
}
于 2012-10-31T13:23:13.207 に答える