您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

[PHP]识别图片主色调_PHP教程

2026/2/24 19:45:59发布23次查看
一、适用情景:,根据颜色列出相应图片。
二、主程序及api解释:
[php] 
'imagecreatefrompng', 'image/jpeg' => 'imagecreatefromjpeg', 'image/gif' => 'imagecreatefromgif');
public function __construct(array $colors = null) { 
        if(null !== $colors) { 
            $this->_colors = $colors; 
        } 
    }
public function setcolors(array $colors) { 
        $this->_colors = $colors; 
    }
public function settolerance($tolerance) { 
        $this->_tolerance = $tolerance; 
    }
public function setignorecolors($colors) { 
        $this->_ignorecolors = $colors; 
    }
public function _isvalidcolor($confval, $val) { 
        if(is_array($confval)) { 
            return $val >= $confval[0] && $val         } else { 
            return $val >= $confval - $this->_tolerance && $val _tolerance; 
        } 
    }
public function getorderedcolors($pic) { 
        $size = getimagesize($pic); 
        if(!$size) { 
            return false; 
        }
$width = $size[0]; 
        $height = $size[1]; 
        $mime = $size['mime']; 
        $func = isset($this->_funcs[$mime]) ? $this->_funcs[$mime] : null; 
        if(!$func) { 
            return false; 
        }
$im = $func($pic); 
        if(!$im) { 
            return false; 
        }
$total = $width * $height; 
        $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 _ignorecolors)) { 
                    continue; 
                }
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); 
        return $nums; 
    }
public function getmajorcolor($pic) { 
        $nums = $this->getorderedcolors($pic); 
        $keys = array_keys($nums); 
        return $keys[0]; 
    } 

1.void setcolors(array $colors)
设置可选颜色,即上图中“全部颜色”下的所有颜色(白、灰、黑...)
2.void settolerance(int $tolerance)
设置容差,比如绿色的rgb值为(0,255,0),如果设置容差为40,那么-40此方法用于大致区别各颜色。
3.void setignorecolors(array $colors)
设置不需考虑的颜色。如大多图片的背景是白色,而我们显然不希望结果是白色,此时可调用此方法简略白色。
4.array getorderedcolors($pic)
根据$pic获取各种颜色(用setcolors设置的颜色)的匹配数量,按匹配量由高到低排列
参数$pic是待检测图片的路径
5.mix getmajorcolor($pic)
内部调用getorderedcolors,返回匹配量最高的颜色的key
三、$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范围www.2cto.com
[php] 
$colors = array( 
    1 => array('red' => array(189, 230), 'green' => array(189, 230), 'blue' => array(189, 230)), 
    2 => array('red' => array(0, 37), 'green' => array(0, 37), 'blue' => array(0, 37)), 
    3 => array('red' => array(128, 255), 'green' => array(0, 76), 'blue' => array(0, 100)), 
); 
需要进行一系列的微调,直至能明显区分各种颜色。
作者:xiaodao1986
http://www.bkjia.com/phpjc/478033.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/478033.htmltecharticle一、适用情景:,根据颜色列出相应图片。 二、主程序及api解释: [php] ?php class majorcolor { //参考颜色 protected $_colors = null; //容差 protected...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product