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; } }