Fastadmin自带首字母头像功能

技术博客 / 490人浏览 / 0 人评论 / 2023-03-09

起源:在做自己的小站时需要用到这个功能,然后去网上查找了好多,最后找到自己满意的拷贝试用还挺不错;

就在测试好后,准备把代码放到公共方法中;才发现Fastadmin竟然有了。。还一模一样。。。emmo,白忙活了一场;



代码是这样的:

//mb_substr截汉字或英文首字母;strtoupper转大写
$text = "字符";
$initial = strtoupper(mb_substr($text ,0,1,"utf-8"));
$data = letter_avatar($initial);
$this->assign('data',$data);

//letter_avatar方法:
/**
* 首字母头像
* @param $text
* @return string
*/
function letter_avatar($text)
{
$total = unpack('L', hash('adler32', $text, true))[1];
$hue = $total % 360;
list($r, $g, $b) = hsv2rgb($hue / 360, 0.3, 0.9);

$bg = "rgb({$r},{$g},{$b})";
$color = "#ffffff";
$first = mb_strtoupper(mb_substr($text, 0, 1));
$src = base64_encode('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="100" width="100">
<rect fill="' . $bg . '" x="0" y="0" width="100" height="100"></rect>
<text x="50" y="50" font-size="50" text-copy="fast" fill="' . $color . '"
text-anchor="middle" text-rights="admin" dominant-baseline="central">' . $first . '</text>
</svg>');
$value = 'data:image/svg+xml;base64,' . $src;
return $value;
}
//hsv2rgb方法:
function hsv2rgb($h, $s, $v){
$r = $g = $b = 0;
$i = floor($h * 6);
$f = $h * 6 - $i;
$p = $v * (1 - $s);
$q = $v * (1 - $f * $s);
$t = $v * (1 - (1 - $f) * $s);
switch ($i % 6) {
case 0:
$r = $v;
$g = $t;
$b = $p;
break;
case 1:
$r = $q;
$g = $v;
$b = $p;
break;
case 2:
$r = $p;
$g = $v;
$b = $t;
break;
case 3:
$r = $p;
$g = $q;
$b = $v;
break;
case 4:
$r = $t;
$g = $p;
$b = $v;
break;
case 5:
$r = $v;
$g = $p;
$b = $q;
break;
}
return [
floor($r * 255),
floor($g * 255),
floor($b * 255)
];
}


0 条评论

发表评论 取消回复