<?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)
];
}
- Une fonction est définie
letter_avatar
, qui reçoit un paramètre$text
représentant le texte pour générer l'avatar.- Utilisez la valeur de hachage
hash
calculée par la fonction$text
et décompressez-la dans un long non signé.- La valeur de hachage est modulo 360 pour obtenir une valeur de teinte
$hue
.- Utilisez
hsv2rgb
des fonctions pour convertir la teinte, la saturation et la luminosité en valeurs de composants RVB.- Génère une couleur d'arrière-plan basée sur les valeurs RVB
$bg
.- Définissez la couleur du texte
$color
sur blanc.- Utilisez
mb_strtoupper
la fonction pour$text
mettre en majuscule la première lettre de .- Générez un arrière-plan carré et un texte centré à l'aide de la syntaxe SVG.
- Utilisez
base64_encode
la fonction pour convertir le code SVG en encodage Base64.- Concaténez l'encodage et le préfixe Base64
data:image/svg+xml;base64,
dans un chemin d'image complet.- Renvoie le chemin de l'image générée. Remarque : Ce code génère uniquement le chemin d'une image d'avatar et ne génère pas l'image sur la page. Si vous souhaitez afficher l'avatar sur la page, vous devez utiliser le chemin de l'image générée comme valeur d'attribut
<img>
de la balisesrc
.