【PHP】利用现有的PHP库生成简单而独特的头像-----单字符头像生成

问题:

用户注册的过程中,没有上传用户头像,在一些需要使用头像的功能中缺失该模块。

使用统一的头像占位又缺乏头像的多样性,识别度非常低。

思路:

语言:PHP

php库:GD库

框架:Laravel

思路:

  • 创建画布---------imagecreate();
  • 填充文案到画布里---------imagefttext();
  • 生成图像并保持本地---------imagepng();

具体代码

一、创建纯色画布
        //创建画布
        $image = imagecreate(200,200);
        //为画布分配颜色
        $color = imagecolorallocate($image,255,255,255);
        //填充颜色到背景
        imagefilledrectangle($image, 0, 0, 199, 199, $color);

注意事项:设置颜色的时候需要通过imagecolorallocate()为画布分配颜色
这些参数是0-255的整数或者十六进制的0x00-0xFF。

二、加载字体并计算文字的位置
        //生成头像的文字
        $text = "慢";
        //加载字体
        $font_file = public_path('tools/avatar/fonts/msyhbd.ttf');
        // 计算字符的宽高 获得字体初始的8个相对位置
        $pos = ImageTTFBBox(61,0,$font_file,$text);
        // 居中公式 (画布宽 - 字体的宽度)/ 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]));

注意事项:字体需要自己先下载到项目中;
导入字体才能计算字体的相对位置;
字体的宽度参照获得的8个相对坐标进行计算;

三、生成图像并保持本地
       //为字体分配颜色
        $color2 = imagecolorallocate($image,0,0,0);
        //填充文案到画布里
        imagefttext($image,61,0,$left_x,$left_y,$color2,$font_file,$text);
        //文件名称,避免重复生成
        $fileName = 'logo_'.time().'.png';
        //本地存储路径
        $localFilePath = public_path('tools/avatar/img/'.$fileName);
        //生成图像并保持本地
        imagepng($image,$localFilePath);

注意事项:
你也可以直接再浏览器中输出图片。
在代码的开头加上一句:header('Content-Type:image/png');设置文件类型为图像;
结尾删除本地存储路径的参数imagepng($image);

四、结尾

步骤比较简单,当然也利用GD库生成验证码。

有不足之处欢迎留言讨论,我会不定时查看聊天室的留言信息。

文章最后有整理好的头像生成小工具。

转载请注明出处!【慢慢来】https://www.slowblog.cn/article_item/387277

你可能感兴趣的:(【PHP】利用现有的PHP库生成简单而独特的头像-----单字符头像生成)