ホームページ >バックエンド開発 >PHPチュートリアル >【PHP】絵のメインカラーを特定する_PHPチュートリアル

【PHP】絵のメインカラーを特定する_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:53:181530ブラウズ

1.該当するシナリオ: 対応する写真を色別にリストします。

【PHP】絵のメインカラーを特定する_PHPチュートリアル
2. メインプログラムとAPIの説明:
[php]

クラス MajorColor
{
//基準色
保護された $_colors = null;
//許容範囲
保護された $_tolerance = 80;
//無視される色
$_ignoreColors = array();
//サポートされている画像タイプ
protected $_funcs = array('image/png' => 'imagecreatefrompng', 'image/jpeg' => 'imagecreatefromjpeg', 'image/gif' => 'imagecreatefromgif');
パブリック関数 __construct(array $colors = null) {
If(null !== $colors) {
$this->_colors = $colors; }
}

パブリック関数 setColors(array $colors) {
$this->_colors = $colors; }

パブリック関数 setTolerance($tolerance) {
$this->_tolerance = $tolerance; }

パブリック関数 setIgnoreColors($colors) {
$this->_ignoreColors = $colors; }

パブリック関数 _isValidColor($confVal, $val) {
If(is_array($confVal)) {
return $val >= $confVal[0] && $val return $val >= $confVal - $this->_tolerance && $val _tolerance
}
}

パブリック関数 getOrderedColors($pic) {
$size = getimagesize($pic); if(!$size) {
false を返します
}

$width = $size[0]; $height = $size[1]; $mime = $size['mime']; $func = isset($this->_funcs[$mime]) $this->_funcs[$mime] : null; If(!$func) {
false を返します
}

$im = $func($pic); if(!$im) {
false を返します
}

$total = $幅 * $高さ
$nums = array(); for($i = 0; $i for($m = 0; $m $color_index = imagecolorat($im, $i, $m); $color_tran = imagecolorsforindex($im, $color_index); $alpha = $color_tran['alpha'];                unset($color_tran['alpha']); 
                if(100 < $alpha || in_array($color_tran, $this->_ignoreColors)) {
                    続く; 
                }
 
                foreach ($this->_colors as $colorid => $color) {
                    if($this->_isValidColor($color['red'], $color_tran['red'])
                        && $this->_isValidColor($color['green'], $color_tran['green'])
                        && $this->_isValidColor($color['blue'], $color_tran['blue'])
                    ) {
                        $nums[$colorid] = isset($nums[$colorid]) ? $nums[$colorid] + 1 : 1; 
                    }
                }
            }
        }
         
        imagedestroy($im); 
        arsort($nums); 
        $nums を返します。 
    }
     
    パブリック関数 getMajorColor($pic) {
        $nums = $this->getOrderedColors($pic); 
        $keys = array_keys($nums); 
        $keys[0] を返します; 
    }
}
1.void setColors(array $colors)
選択可能な色、つまり上の図の「すべての色」の下にあるすべての色 (白、灰、黑...) を設定します

2.void setTolerance(int $tolerance)
設置容量差、たとえば色の RGB 値は (0,255,0) で、設置容量差が 40 の場合、-403.void setIgnoreColors(array $colors)

多くの写真の背景が白色であるように、結果が白色であることは望ましくありませんが、この場合はこの方法を使用して簡単に白色にすることができます。

4.array getOrderedColors($pic)
$pic に基づいて、さまざまな色 (setColors で設定された色) の適合数を取得し、適合数は上位から下位の順に並べられます

パラメータ$picは画像待機中の経路


5.mix getMajorColor($pic)
内部ではgetOrderedColorsを使用し、適合量最高の色のキーを返します

三、$colorsの格式及び范围決定
1. $colors 内のさまざまな色の違いが明らかな場合は、単一の入力色の値のみが必要であり、内部では setTolerance 設定の許容差に基づいて各色が区別されます。 [php]

$colors = array(

    1 => array('red' => 0xff, 'green' => 0xff, 'blue' => 0xff),
    2 => array('red' => 0xc0, 'green' => 0xc0, 'blue' => 0xc0),
    2 => array('red' => 0x00, 'green' => 0x00, 'blue' => 0x00),
); 


2. 許容値を設定する setTolerance メソッドでは、さまざまな色を大まかに区別することしかできません。より正確な制御が必要な場合は、特定の色の R、G、B 範囲を個別に設定する必要があります。 [php]
$colors = array(
1 => 配列('赤' => 配列(189, 230), '緑' => 配列(189, 230), '青' => 配列(189, 230)),
2 => 配列('赤' => 配列(0, 37), '緑' => 配列(0, 37), '青' => 配列(0, 37)),
3 => 配列('赤' => 配列(128, 255), '緑' => 配列(0, 76), '青' => 配列(0, 100)),
); さまざまな色が明確に区別できるようになるまで、一連の微調整が必​​要です。
著者: xiaodao1986

http://www.bkjia.com/PHPjc/478033.html

tru​​ehttp://www.bkjia.com/PHPjc/478033.html技術記事 1. 該当するシナリオ: 対応する画像を色別にリストします。 2. メインプログラムと API の説明: [php] ?php class MajorColor { //参照色 protected $_colors = null; //許容値 protected...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。