您的当前位置:首页>全部文章>文章详情

PHP根据昵称或者姓名自动生成文字头像(图片)的方法

发表于:2022-11-05 00:05:23浏览:1708次TAG: #PHP #ThinkPHP #生成头像 #文字头像

在做勾股OA系统的时候访客用户给一个默认头像比较合适,添加用户,或者用户注册成功之后,根据用户名或者姓名的首个字符生成默认的头像,支持生成中文、英文的首字头像。如图:
图片alt

代码如下:

 /**
 * 生成默认头像 ay
 * @param $text
 * @return false|string
 */
public static function createAvatar($text = "阿"){

    $randBg = [
        ['31','38','35'],
        ['199','210','212'],
        ['34','162','195'],
        ['27','167','132'],
        ['236','43','36'],
        ['222','118','34']
    ];
    $bg = $randBg[ array_rand($randBg)]; //随机获取背景

    $image = imagecreate(200,200);  //创建画布
    $color = imagecolorallocate($image,$bg[0],$bg[1],$bg[2]); //为画布分配颜色
    imagefilledrectangle($image, 0, 0, 199, 199, $color); //填充颜色到背景

    $fontSize = 90; //字体大小
    $font_file = public_path('static/common/fonts')."FZDeSHJW_506L.TTF"; //字体文件 * 修改成自己的字体路径

    $pos = ImageTTFBBox($fontSize,0,$font_file,$text);// 计算字符的宽高 获得字体初始的8个相对位置
    // 居中公式 (画布宽 - 字体的宽度)/ 2 - 字体初始位置的偏移量
    $left_x = intval((200 - abs($pos[2] - $pos[0])) / 2 - abs($pos[0]));
    $left_y = intval((200 - abs($pos[5] - $pos[3])) / 2 + abs($pos[5]));

    $color2 = imagecolorallocate($image,255,255,255);  //为字体分配颜色
    imagefttext($image,$fontSize,0,$left_x,$left_y,$color2,$font_file,$text); //填充文案到画布里

    $fileName = 'Avatar_'.time().'.png'; //文件名称,避免重复生成

    $localFilePath = public_path('static/tmp/avatar').$fileName;//本地存储路径  * 修改成自己存放文件的路径

    imagepng($image,$localFilePath);//生成图像并保持本地
    if(file_exists($localFilePath)){
        return '/static/tmp/avatar/'.$fileName;
    }else{
        return null;
    }
}