«
PHP获取图片主要部分颜色
myluzh 发布于
阅读:356
PHP
<?php
/**
* 获取一张图片的主要颜色
* @param string $imgUrl 图片的本地路径或者在线路径
* @param boolean $isHex 是否获取16进制的主要颜色
*/
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
*/
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";
}
echo getMainColor('https://cn.bing.com/th?id=OHR.AbuSimbelSunFest_EN-CN8625936842_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp');
//输出rgb(103, 54, 12)
echo getMainColor('https://cn.bing.com/th?id=OHR.AbuSimbelSunFest_EN-CN8625936842_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp',1);
//输出#67360c
php
正文到此结束
版权声明:若无特殊注明,本文皆为 原创,转载请保留文章出处。
文章内容:https://itho.cn/php/78.html
文章标题:《
PHP获取图片主要部分颜色》