<?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
、unsigned long に解凍します。- ハッシュ値は 360 を法として、色相値を取得します
$hue
。- 関数を使用して
hsv2rgb
、色相、彩度、明度を RGB コンポーネント値に変換します。- RGB 値に基づいて背景色を生成します
$bg
。- 文字の色
$color
を白に設定します。- の最初の文字を大文字にする
mb_strtoupper
には、関数を使用します。$text
- SVG 構文を使用して、正方形の背景と中央揃えのテキストを生成します。
- SVG コードを Base64 エンコードに変換する関数を使用します
base64_encode
。- Base64 エンコードとプレフィックスを
data:image/svg+xml;base64,
完全なイメージ パスに連結します。- 生成された画像パスを返します。注: このコードはアバター画像のパスを生成するだけであり、画像をページに出力しません。ページ上にアバターを表示したい場合は、生成された画像パスを
<img>
タグ の属性値として使用する必要がありますsrc
。