亲测没有问题直接传入图片地址自动解析图片中主要颜色色调用于一些头像背景自动填充使用

/**
 * 获取一张图片的主要颜色
 * @param string $imgUrl 图片的本地路径或者在线路径
 * @param boolean $isHex 是否获取16进制的主要颜色
 * @author 莹火虫 [ 123246359@qq.com ]
 */
if (!function_exists('getMainColor')) {
    function getMainColor($imgUrl,$isHex=false) {
        $imageInfo = getimagesize($imgUrl);
        //图片类型
        $imgType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1));
        //对应函数
        $imageFun = 'imagecreatefrom' . ($imgType == 'jpg' ? 'jpeg' : $imgType);
        $i = $imageFun($imgUrl);
        //循环色值
        $rColorNum=$gColorNum=$bColorNum=$total=0;
        for ($x=0;$x<imagesx($i);$x++) {
            for ($y=0;$y<imagesy($i);$y++) {
                $rgb = imagecolorat($i,$x,$y);
                //三通道
                $r = ($rgb >> 16) & 0xFF;
                $g = ($rgb >> 8) & 0xFF;
                $b = $rgb & 0xFF;
                $rColorNum += $r;
                $gColorNum += $g;
                $bColorNum += $b;
                $total++;
            }
        }
        $rgb = array();
        $r = round($rColorNum/$total);
        $g = round($gColorNum/$total);
        $b = round($bColorNum/$total);
        if($isHex){
            return rgb2Hex($r, $g, $b);
        }
        return "rgb($r, $g, $b)";
    }
}
/**
 * RGB颜色转16进制颜色
 * @param int|array $r
 * @param int $g
 * @param int $b
 */
if (!function_exists('rgb2Hex')) {
    function rgb2Hex($r, $g=-1, $b=-1)
    {
        if (is_array($r) && sizeof($r) == 3)
            list($r, $g, $b) = $r;
        $r = intval($r); $g = intval($g);
        $b = intval($b);
        $r = dechex($r<0?0:($r>255?255:$r));
        $g = dechex($g<0?0:($g>255?255:$g));
        $b = dechex($b<0?0:($b>255?255:$b));
        $color = (strlen($r) < 2?'0':'').$r;
        $color .= (strlen($g) < 2?'0':'').$g;
        $color .= (strlen($b) < 2?'0':'').$b;
        return "#$color";
    }
}



点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部