<?php
$name="哈哈";
$logo=letter_avatar($name);
echo '<img src="'.$logo.'" style=" border-radius: 50%;">';
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;
}
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)
];
}
- 定义了一个
letter_avatar
函数,接收一个参数$text
,表示要生成头像的文字。- 使用
hash
函数计算出$text
的哈希值,并将其解包为一个无符号长整型数。- 将哈希值对360取余得到一个色相值
$hue
。- 使用
hsv2rgb
函数将色相、饱和度和亮度转换为RGB分量值。- 根据RGB值生成背景颜色
$bg
。- 设定文字颜色
$color
为白色。- 使用
mb_strtoupper
函数将$text
的首字母转为大写。- 使用SVG语法生成一个正方形的背景和一个居中的文字。
- 使用
base64_encode
函数将SVG代码转为Base64编码。- 将Base64编码和前缀
data:image/svg+xml;base64,
拼接成完整的图片路径。- 返回生成的图片路径。 注意:这段代码只是生成了一个头像图片的路径,并没有将图片输出到页面中。如果要在页面中显示头像,需要将生成的图片路径作为
<img>
标签的src
属性值。