头像

PHP自动截取用户名第一个字生成文字头像

技术分享发布:2022-11-04 11:24:28

有的时候我们要在页面上显示用户头像,比如登录的时候,评论列表里面。

当用户没有上传头像的时候,一般是这几种处理方式:一是使用默认头像,二是使用邮箱头像。

默认头像太单调了,邮箱头像速度上有点慢,并且不是所有的用户都可以获取到邮箱头像,因此根据用户名或昵称等文字数据生成用户的头像也是不错的选择。

网上搜罗的方法,用起来挺方便的,分享一下。


源码如下:

<?php

class letterAvatar{
	
	private $config=array(
		'width'=>100,
		'height'=>100,
	);
	
	public function __construct($width='',$height=''){
		$width && $this->config['width']=$width;
		$height && $this->config['height']=$height;
	}
	
	/**
	* 首字母头像
	* @param $text 字符串
	* @param $type 头像图形,1圆形,2方形
	* @return string
	*/
	public function show($text, $type=1){
		$total=unpack('L', hash('adler32', $text, true))[1];
		$hue=$total % 360;
		list($r, $g, $b)=$this->hsv2rgb($hue / 360, 0.5, 0.9);
		$bg='rgb('.$r.','.$g.','.$b.')';
		$color='#ffffff';
		$first=mb_strtoupper(mb_substr($text, 0, 1));
		$halfWidth=$this->config['width'] / 2;
		$halfHeight=$this->config['height'] / 2;
		if($type == 1){
			$src='<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'.$this->config['width'].'" height="'.$this->config['height'].'"><circle fill="'.$bg.'" cx="'.$halfWidth.'" cy="'.$halfHeight.'" r="'.$halfHeight.'"></circle><text x="'.$halfWidth.'" y="'.$halfHeight.'" font-size="'.$halfHeight.'" text-copy="fast" fill="'.$color.'" text-anchor="middle" text-rights="admin" alignment-baseline="central">'.$first.'</text></svg>';
		}else{
			$src='<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'.$this->config['width'].'" height="'.$this->config['height'].'"><rect fill="'.$bg.'" x="0" y="0" width="'.$this->config['width'].'" height="'.$this->config['height'].'"></rect><text x="'.$halfWidth.'" y="'.$halfHeight.'" font-size="'.$halfHeight.'" text-copy="fast" fill="'.$color.'" text-anchor="middle" text-rights="admin" alignment-baseline="central">'.$first.'</text></svg>';
		}
        return 'data:image/svg+xml;base64,'.base64_encode($src);
    }
	
	private 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 array(
			floor($r * 255),
			floor($g * 255),
			floor($b * 255)
		);
    }
}

使用方法:

<?php
//实例化的时候可以定义头像大小,默认100*100
$avatar=new letterAvatar();

/**
*这里有两个参数,第一个是文字字符串,第二个是图片类型。1是圆形;2是方形
*reutrn返回的是图片的base64编码
**/
$image=$avatar->show('文字头像');

//可以保存图片到本地,也可以直接在HTML中使用,如
echo '<img src="'.$image.'"/>';


加载中...
您需要登录后才可以评论,登录OR注册
还有0条精彩评论,点击继续查看
︿