问题:

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

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

思路:

语言: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库生成验证码。

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

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

php生成字母头像,【PHP】利用现有的PHP库生成简单而独特的头像-----单字符头像生成...相关推荐

  1. python生成字母图片_Python 模拟动态产生字母验证码图片功能

    模拟动态产生字母验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image ...

  2. 前端根据文字生成字母头像

    参考博客:https://mkblog.cn/1886/ 代码如下: <html><head><title>前端根据文字生成字母头像</title>&l ...

  3. java8 函数式编程_如何使用Java 8函数式编程生成字母序列

    java8 函数式编程 我偶然发现了用户" mip"一个有趣的堆栈溢出问题 . 问题是: 我正在寻找一种生成字母序列的方法: A, B, C, ..., Z, AA, AB, AC ...

  4. 如何使用Java 8函数式编程生成字母序列

    我偶然发现了用户" mip"一个有趣的堆栈溢出问题 . 问题是: 我正在寻找一种生成字母序列的方法: A, B, C, ..., Z, AA, AB, AC, ..., ZZ. 可 ...

  5. 利用ffmpeg提供的库(API)进行音频与视频的编码并生成文件

    Output example.c 目录 [隐藏] 1 概述 2 音频输出 2.1 add_audio_stream 2.2 open_audio 2.3 get_audio_frame 2.4 wri ...

  6. php用字母数字生成用户名,请问生成字母加数字

    请教生成字母加数字 有26个字母{a-Z}和10个数字{0-9} 如果要生成8位字符的,区分大小写, 这样的排列是(26+26+10)8次方=218340105584896个,这218万亿 但相邻不能 ...

  7. java 验证码 字母_使用java生成字母验证码

    本文实例为大家分享了java生成字母验证码的具体代码,供大家参考,具体内容如下 import java.awt.BasicStroke; import java.awt.Color; import j ...

  8. ASCII字符代码表,python 生成字母a到z字母,生产倒序列表

    ASCII码表中,每个英文字母都对应了一个数字且分大小写如下图.a对应的ASCII是97,A对应的是65,大小写之间相差32,Z则是90,z是122. 图片来源网上 接下来是如何将他们进行转换: or ...

  9. html怎么随机生成字母,JS简单生成由字母数字组合随机字符串示例_气质_前端开发者...

    本文实例讲述了 前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法 Math.random().toString(36).sub ...

  10. python自动生成分析报告_利用PYTHON全自动生成分析报告

    日常工作当中,特别是金融行业当中,有不少人的工作是提取数据,分析数据,得到可视化图表,并加入自已的研究分析结论,最终生成分析报告,并且有不少报告是定期生成,存在不少重复手工劳动.本文通过一个简单实例, ...

最新文章

  1. 串口服务器支持多台上位机,RS485多机通信一台上位机两台下位机问题,
  2. Leetcode 207. 课程表 解题思路及C++实现
  3. asp.net core系列 71 Web架构分层指南
  4. Android之解决YouTubePlayerView启动在Android5.0左右的手机出现奔溃问题
  5. 512抗击震灾捐款背后的思考
  6. 强悍的 Linux —— 强悍的 find
  7. 给笔记本更换SSD硬盘
  8. x265将yuv转h265(七)
  9. 面试题:逗号表达式运用
  10. ICCV-2021 Oral | AdaFocus:利用空间冗余性实现高效视频识别
  11. ideal如何用标签输出_实战|如何使用JavaScript访问设备前后摄像头
  12. 计算机信息检索自考知识点,计算机信息检索02139自考资料.doc
  13. 最坑爹的硬盘:希捷ST2000DM001
  14. JS:键盘事件(onkeydown 、onkeypress、 onkeyup三个)
  15. 最新二次开发仿包图网素材图片源码
  16. 自动控制原理_卢京潮_自动控制一般概念及数学模型_学习笔记
  17. android技术牛人的博客[转]
  18. Paper Notes: Cross-Domain Image Translation Based on GAN
  19. 【仿写网站】用swiper实现故宫博物院首页轮播图
  20. VSCode 和 CMake 搭建嵌入式开发环境

热门文章

  1. 大智慧c语言dll,易语言大智慧dll模板接口
  2. 快速拓展领英人脉网9大秘诀,让我们更高效的使用领英
  3. 液压泵优化设计matlab,基于MATLAB/Simulink的挖掘机动力匹配技术的转速传感变量系统设计...
  4. CAD计算机辅助设计——文件管理和界面设置
  5. 输入法辅助工具:自动切换输入法 for Mac
  6. Python--网页更新监控工具
  7. PCWorld:流量日趋集中 大公司影响整个互联网
  8. 什么叫0day和Warez?
  9. linux局域网连接网络打印机驱动程序,EBS on linux 网络打印机配置
  10. 华为数通考试正式改版,改版前后有什么区别?