胖蒜

分享有价值的资源

PHP生成 base64 首字母头像

胖蒜网的打赏页面使用的是TePass插件,打赏的时候如果没有登录,采用默认的头像,我本站是利用JS将默认头像改为打赏名称的首字母,因为要引用jquery,我本人不是很喜欢,所以就没有加到插件里面。
现在我尝试用PHP生成头像的形式,将默认的无头像打赏者的头像变成了打赏名称的首字母,具体效果可以前往我的功能定制页面查看:https://pangsuan.com/service.html

/**
 * 首字母头像
 * @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" alignment-baseline="central">' . $first . '</text></svg>');
    return 'data:image/svg+xml;base64,' . $src;
}
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)
    ];
}    
echo "<img src='".letter_avatar('胖蒜网')."' />";

感觉很棒,欢迎点赞 OR 打赏~

分享到:

评论 (0)

立即登录评论
可联系QQ744272645咨询
马上咨询 自媒体号