PHP 根据用户首字母生成头像
PHP 根据用户首字母生成头像:
<?php
namespace Holyrisk\Img;
class Image{
/**
* 生成首字母头像
* 常用于一些默认用户头像生成
* @param $text
* @return string
*/
public static function letter_avatar($text)
{
$total = unpack('L', hash('adler32', $text, true))[1];
$hue = $total % 360;
list($r, $g, $b) = self::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>');
$value = 'data:image/svg+xml;base64,' . $src;
return $value;
}
protected static 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),
];
}
/**
* Base64生成图片文件,自动解析格式
* @param $base64
* @param $path
* @param $filename
* @return array
*/
public static function base64ToImage($base64, $path, $filename)
{
$res = array();
//匹配base64字符串格式
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64, $result)) {
//保存最终的图片格式
$postfix = $result[2];
$base64 = base64_decode(substr(strstr($base64, ','), 1));
$filename .= '.' . $postfix;
$path .= $filename;
//创建图片
if (file_put_contents($path, $base64)) {
$res['status'] = 1;
$res['filename'] = $filename;
} else {
$res['status'] = 2;
$res['err'] = 'Create img failed!';
}
} else {
$res['status'] = 2;
$res['err'] = 'Not base64 char!';
}
return $res;
}
}